Showing
12 changed files
with
418 additions
and
0 deletions
1-two-sum.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number[]} nums | ||
| 3 | + * @param {number} target | ||
| 4 | + * @return {number[]} | ||
| 5 | + */ | ||
| 6 | +var twoSum1 = function(nums, target) { | ||
| 7 | + for(let [i, v] of nums.entries()) { | ||
| 8 | + let f = nums.indexOf(target-v, i+1); | ||
| 9 | + | ||
| 10 | + if (f >= 0) { | ||
| 11 | + return [i, f] | ||
| 12 | + } | ||
| 13 | + } | ||
| 14 | +}; | ||
| 15 | + | ||
| 16 | +var twoSum = function(nums, target) { | ||
| 17 | + let m = {} | ||
| 18 | + for(let [i, v] of nums.entries()) { | ||
| 19 | + (m[v] === void 0) && (m[v]=i); | ||
| 20 | + let d = target-v; | ||
| 21 | + // console.info('-->', i,v,d,m[d]) | ||
| 22 | + if (m[d] >= 0 && m[d] !== i) { | ||
| 23 | + return [m[d], i] | ||
| 24 | + } | ||
| 25 | + } | ||
| 26 | +}; | ||
| 27 | + | ||
| 28 | + | ||
| 29 | +console.info(twoSum([3,2,4], 6)); | ||
| 30 | +console.info(twoSum([2,7,11,15], 9)); | ||
| 31 | +console.info(twoSum([4,2,4], 8)); |
168-convertToTitle.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number} n | ||
| 3 | + * @return {string} | ||
| 4 | + */ | ||
| 5 | +var convertToTitle = function(n) { | ||
| 6 | + let title = []; | ||
| 7 | + while (n--) { | ||
| 8 | + let c = n%26+1; | ||
| 9 | + console.info(n, c, String.fromCharCode(64+c)); | ||
| 10 | + n = ~~(n / 26); | ||
| 11 | + | ||
| 12 | + title.unshift(String.fromCharCode(64+c)); | ||
| 13 | + } | ||
| 14 | + return title.join(''); | ||
| 15 | +}; | ||
| 16 | + | ||
| 17 | +console.info(convertToTitle(701)) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
175-joinTable.sql
0 → 100644
176-topSecondSalary.sql
0 → 100644
2-addTwoNumbers.js
0 → 100644
| 1 | +/** | ||
| 2 | + * Definition for singly-linked list. | ||
| 3 | + * function ListNode(val) { | ||
| 4 | + * this.val = val; | ||
| 5 | + * this.next = null; | ||
| 6 | + * } | ||
| 7 | + */ | ||
| 8 | +function ListNode(val) { | ||
| 9 | + this.val = val; | ||
| 10 | + this.next = null; | ||
| 11 | +} | ||
| 12 | +/** | ||
| 13 | + * @param {ListNode} l1 | ||
| 14 | + * @param {ListNode} l2 | ||
| 15 | + * @return {ListNode} | ||
| 16 | + */ | ||
| 17 | +var addTwoNumbers = function (l1, l2) { | ||
| 18 | + function list2array(list) { | ||
| 19 | + let arr = []; | ||
| 20 | + do { | ||
| 21 | + arr.push(list.val); | ||
| 22 | + list = list.next; | ||
| 23 | + } | ||
| 24 | + while (list); | ||
| 25 | + return arr; | ||
| 26 | + } | ||
| 27 | + function array2list(arr) { | ||
| 28 | + let list = new ListNode(), c = list; | ||
| 29 | + for (let [i, v] of arr.entries()) { | ||
| 30 | + c.val = v; | ||
| 31 | + c.next = i+1 < arr.length?new ListNode():null; | ||
| 32 | + c = c.next; | ||
| 33 | + } | ||
| 34 | + return list; | ||
| 35 | + } | ||
| 36 | + let arr1 = list2array(l1); | ||
| 37 | + let arr2 = list2array(l2); | ||
| 38 | + let len = Math.max(arr1.length, arr2.length); | ||
| 39 | + let rs = [], f = 0; | ||
| 40 | + for (let i = 0; i < len; i++) { | ||
| 41 | + let v1 = arr1.shift()||0; | ||
| 42 | + let v2 = arr2.shift()||0; | ||
| 43 | + let v = v1 + v2 + f; | ||
| 44 | + if (v >= 10) { | ||
| 45 | + rs.push(v - 10); | ||
| 46 | + f = 1; | ||
| 47 | + } else { | ||
| 48 | + rs.push(v); | ||
| 49 | + f = 0; | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + if (f > 0) { | ||
| 53 | + rs.push(f); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + return array2list(rs); | ||
| 57 | +}; | ||
| 58 | + | ||
| 59 | + | ||
| 60 | +console.info(addTwoNumbers({ | ||
| 61 | + val: 1, | ||
| 62 | + next: null | ||
| 63 | +}, { | ||
| 64 | + val: 9, | ||
| 65 | + next: { val: 9, next: null } | ||
| 66 | +})); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
326-isPowerOfThree.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number} n | ||
| 3 | + * @return {boolean} | ||
| 4 | + */ | ||
| 5 | +var isPowerOfThree = function(n) { | ||
| 6 | + if (n ===1) { | ||
| 7 | + return true; | ||
| 8 | + } | ||
| 9 | + while(true) { | ||
| 10 | + n = n/3; | ||
| 11 | + if (n === 1) { | ||
| 12 | + return true; | ||
| 13 | + } else if(n < 1) { | ||
| 14 | + return false; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | +}; | ||
| 18 | + | ||
| 19 | +console.info(isPowerOfThree(0)); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
344-reverseString.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {character[]} s | ||
| 3 | + * @return {void} Do not return anything, modify s in-place instead. | ||
| 4 | + */ | ||
| 5 | +var reverseString = function(s) { | ||
| 6 | + let len = s.length, half = len>>1; | ||
| 7 | + for (let i=0;i<half;i++) { | ||
| 8 | + if (i !== len-1-i) { | ||
| 9 | + [s[i], s[len-1-i]] = [s[len-1-i], s[i]]; | ||
| 10 | + } | ||
| 11 | + } | ||
| 12 | + return s; | ||
| 13 | +}; | ||
| 14 | + | ||
| 15 | +console.info(reverseString(["H","a","n","N","a","h", "9"])); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
4-findMedianSortedArrays.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number[]} nums1 | ||
| 3 | + * @param {number[]} nums2 | ||
| 4 | + * @return {number} | ||
| 5 | + */ | ||
| 6 | +var findMedianSortedArrays = function(nums1, nums2) { | ||
| 7 | + function merge(nums1, nums2) { | ||
| 8 | + let nums = []; | ||
| 9 | + while (nums1.length || nums2.length) { | ||
| 10 | + if (nums1.length === 0) { | ||
| 11 | + return nums.concat(nums2); | ||
| 12 | + } | ||
| 13 | + if (nums2.length === 0) { | ||
| 14 | + return nums.concat(nums1); | ||
| 15 | + } | ||
| 16 | + | ||
| 17 | + if (nums1[0] < nums2[0]) { | ||
| 18 | + nums.push(nums1.shift()); | ||
| 19 | + } else { | ||
| 20 | + nums.push(nums2.shift()); | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + return nums; | ||
| 24 | + } | ||
| 25 | + let nums = merge(nums1, nums2); | ||
| 26 | + | ||
| 27 | + // let nums = [...nums1, ...nums2]; | ||
| 28 | + // nums.sort((a,b)=>a-b); | ||
| 29 | + // console.info(nums1, nums2, '=>', nums) | ||
| 30 | + let len = nums.length; | ||
| 31 | + if (len % 2 === 0) { | ||
| 32 | + return (nums[len/2-1] + nums[(len/2)]) / 2; | ||
| 33 | + } else { | ||
| 34 | + return nums[~~(len/2)]; | ||
| 35 | + } | ||
| 36 | +}; | ||
| 37 | + | ||
| 38 | +var nums1 = []; | ||
| 39 | +var nums2 = [9, | ||
| 40 | +28, | ||
| 41 | +245, | ||
| 42 | +307, | ||
| 43 | +461, | ||
| 44 | +561, | ||
| 45 | +680, | ||
| 46 | +683]; | ||
| 47 | +console.info(findMedianSortedArrays(nums1, nums2)); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
50-pow.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number} x | ||
| 3 | + * @param {number} n | ||
| 4 | + * @return {number} | ||
| 5 | + */ | ||
| 6 | +var myPow = function(x, n) { | ||
| 7 | + if (n === 0) return 1; | ||
| 8 | + if (n === 1) return x; | ||
| 9 | + | ||
| 10 | + if (x === 1) return 1; | ||
| 11 | + if (x === -1) return n % 2 === 0 ? 1 : -1; | ||
| 12 | + | ||
| 13 | + if (n < 0) { | ||
| 14 | + n = -n; | ||
| 15 | + x = 1/x; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + return (n % 2 === 0) ? myPow(x*x, n/2) : x * myPow(x*x, (n-1)/2); | ||
| 19 | +}; | ||
| 20 | + | ||
| 21 | +var slowPow = function(x, n) { | ||
| 22 | + if (Math.abs(x) >= 100) throw new Error('x is out of range'); | ||
| 23 | + if (n !== ~~n) throw new Error('n is out of range'); | ||
| 24 | + | ||
| 25 | + if (n === 0) return 1; | ||
| 26 | + if (x === 1) return 1; | ||
| 27 | + if (x === -1) return n % 2 === 0 ? 1 : -1; | ||
| 28 | + | ||
| 29 | + let N = 1e8; | ||
| 30 | + let ret = 1.0; | ||
| 31 | + let sign = n > 0 ? 1 : (n=-n)&&-1; | ||
| 32 | + while (n > 0) { | ||
| 33 | + ret *= p(x, n>=N?N:n); | ||
| 34 | + n -= N; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + return sign > 0 ? ret : 1/ret; | ||
| 38 | +}; | ||
| 39 | + | ||
| 40 | +var p = function(x, n) { | ||
| 41 | + let ret = 1.0; | ||
| 42 | + for (let i = 0; i < n; i++ ) { | ||
| 43 | + ret = ret * x; | ||
| 44 | + } | ||
| 45 | + return ret; | ||
| 46 | +}; | ||
| 47 | + | ||
| 48 | +var x = 0, n = -3; | ||
| 49 | +console.info(myPow(x, n), Math.pow(x, n)); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
54-spiralOrder.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number[][]} matrix | ||
| 3 | + * @return {number[]} | ||
| 4 | + */ | ||
| 5 | +var spiralOrder = function(matrix) { | ||
| 6 | + let rs = []; | ||
| 7 | + while (matrix.length) { | ||
| 8 | + // right | ||
| 9 | + if (matrix.length) { | ||
| 10 | + rs = rs.concat(matrix.shift()); | ||
| 11 | + } | ||
| 12 | + console.info('after right matrix', matrix) | ||
| 13 | + | ||
| 14 | + // down | ||
| 15 | + matrix.forEach(m => { | ||
| 16 | + let t = m.pop(); | ||
| 17 | + (t !== void 0) && rs.push(t); | ||
| 18 | + }); | ||
| 19 | + console.info('after down matrix', matrix); | ||
| 20 | + | ||
| 21 | + // left | ||
| 22 | + if (matrix.length) { | ||
| 23 | + rs = rs.concat(matrix.pop().reverse()); | ||
| 24 | + } | ||
| 25 | + console.info('after left matrix', matrix); | ||
| 26 | + | ||
| 27 | + // | ||
| 28 | + for (let i=0;i<matrix.length;i++) { | ||
| 29 | + // console.info('===>', matrix, [matrix.length-1-i], matrix.length-1-i) | ||
| 30 | + let t = matrix[matrix.length-1-i].shift(); | ||
| 31 | + (t !== void 0) && rs.push(t); | ||
| 32 | + } | ||
| 33 | + console.info('matrix', matrix); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + return rs; | ||
| 37 | +}; | ||
| 38 | + | ||
| 39 | +console.info(spiralOrder([ | ||
| 40 | + [1], | ||
| 41 | + [5], | ||
| 42 | + [9], | ||
| 43 | + [13] | ||
| 44 | + ])); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
7-reverse.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number} x | ||
| 3 | + * @return {number} | ||
| 4 | + */ | ||
| 5 | +var reverse = function(x) { | ||
| 6 | + let r; | ||
| 7 | + let sign = Math.sign(x); | ||
| 8 | + try { | ||
| 9 | + r = Number.parseInt(String(Math.abs(x)).split('').reverse().join('')||'0'); | ||
| 10 | + } catch (e) { | ||
| 11 | + r = 0; | ||
| 12 | + } | ||
| 13 | + return r > Math.pow(2, 31)-1 ? 0 : sign*r; | ||
| 14 | +}; | ||
| 15 | + | ||
| 16 | +console.info(reverse(0)); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
73-setZeroes.js
0 → 100644
| 1 | +/** | ||
| 2 | + * @param {number[][]} matrix | ||
| 3 | + * @return {void} Do not return anything, modify matrix in-place instead. | ||
| 4 | + */ | ||
| 5 | +var setZeroes2 = function (matrix) { | ||
| 6 | + let m = matrix.length; | ||
| 7 | + let n = matrix[0].length; | ||
| 8 | + let rs = [] | ||
| 9 | + // copy init matrix | ||
| 10 | + for (let i = 0; i < m; i++) { | ||
| 11 | + let r = [] | ||
| 12 | + // for(let j=0;j<n;j++) { | ||
| 13 | + // r.push(void 0) | ||
| 14 | + // } | ||
| 15 | + rs.push(r); | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + for (let i = 0; i < m; i++) { | ||
| 19 | + for (let j = 0; j < n; j++) { | ||
| 20 | + let v = matrix[i][j] | ||
| 21 | + if (v === 0) { | ||
| 22 | + for (let x = 0; x < n; x++) { | ||
| 23 | + rs[i][x] = 0; | ||
| 24 | + } | ||
| 25 | + for (let y = 0; y < m; y++) { | ||
| 26 | + rs[y][j] = 0; | ||
| 27 | + } | ||
| 28 | + } else { | ||
| 29 | + (rs[i][j] === void 0) && (rs[i][j] = v); | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + return rs; | ||
| 35 | +}; | ||
| 36 | + | ||
| 37 | +var setZeroes_ok = function (matrix) { | ||
| 38 | + let m = matrix.length; | ||
| 39 | + let n = matrix[0].length; | ||
| 40 | + let rs = []; | ||
| 41 | + // init matrix | ||
| 42 | + for (let i = 0; i < m; i++) { | ||
| 43 | + rs.push([]); | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + for (let i = 0; i < m; i++) { | ||
| 47 | + for (let j = 0; j < n; j++) { | ||
| 48 | + let v = matrix[i][j] | ||
| 49 | + if (v === 0 && rs[i][j] === void 0) { | ||
| 50 | + for (let x = 0; x < n; x++) { | ||
| 51 | + let t = matrix[i][x]; | ||
| 52 | + if (t !== 0) { | ||
| 53 | + rs[i][x] = t; | ||
| 54 | + } | ||
| 55 | + matrix[i][x] = 0; | ||
| 56 | + } | ||
| 57 | + for (let y = 0; y < m; y++) { | ||
| 58 | + let t = matrix[y][j]; | ||
| 59 | + if (t !== 0) { | ||
| 60 | + rs[y][j] = t; | ||
| 61 | + } | ||
| 62 | + matrix[y][j] = 0; | ||
| 63 | + } | ||
| 64 | + } else { | ||
| 65 | + rs[i][j] = v; | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | +}; | ||
| 70 | + | ||
| 71 | +var setZeroes = function (matrix) { | ||
| 72 | + let m = matrix.length; | ||
| 73 | + let n = matrix[0].length; | ||
| 74 | + | ||
| 75 | + let rows = new Set(); | ||
| 76 | + let cols = new Set(); | ||
| 77 | + | ||
| 78 | + for (let i = 0; i < m; i++) { | ||
| 79 | + for (let j = 0; j < n; j++) { | ||
| 80 | + let v = matrix[i][j] | ||
| 81 | + if (v === 0) { | ||
| 82 | + rows.add(i); | ||
| 83 | + cols.add(j); | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + rows.forEach(e => { | ||
| 89 | + for (let j=0;j<n;j++) { | ||
| 90 | + matrix[e][j] = 0; | ||
| 91 | + } | ||
| 92 | + }); | ||
| 93 | + | ||
| 94 | + cols.forEach(e => { | ||
| 95 | + for (let i=0;i<m;i++) { | ||
| 96 | + matrix[i][e] = 0; | ||
| 97 | + } | ||
| 98 | + }); | ||
| 99 | +}; | ||
| 100 | +var matrix = [[0, 1, 2, 0], [3, 4, 5, 2], [1, 3, 1, 5]]; | ||
| 101 | +setZeroes(matrix); | ||
| 102 | +console.info(matrix); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment