diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 3c3629e..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/README.md b/README.md deleted file mode 100644 index f3e94c0..0000000 --- a/README.md +++ /dev/null @@ -1,7870 +0,0 @@ - -### 1. [Two Sum](https://leetcode.com/problems/two-sum/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} target - * @return {number[]} - */ -var twoSum = function(nums, target) { - var ret = []; - for(var i = 0; i < nums.length; i++) { - for(var j = i + 1; j < nums.length; j++) { - if(nums[i] + nums[j] === target) { - ret.push(i); - ret.push(j); - } - } - } - return ret; -}; -``` - - -### 2. [Add Two Numbers](https://leetcode.com/problems/add-two-numbers/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} l1 - * @param {ListNode} l2 - * @return {ListNode} - */ - -var getLengthList = function(head) { - var len = 0; - while (head !== null) { - len++; - head = head.next; - } - return len; -}; - -var addTwoNumbers = function(l1, l2) { - var len1 = getLengthList(l1); - var len2 = getLengthList(l2); - - if (len2 >= len1) { - var tmp; - tmp = l1; l1 = l2; l2 = tmp; - } - - var head = l1; - var val1, val2; - var isOverTen = false; - var prev; - while (l1 !== null) { - val1 = l1.val; - val2 = l2 !== null ? l2.val : 0; - - if (isOverTen) { - val1++; - isOverTen = false; - } - if (val1 + val2 >= 10) { - l1.val = val1 + val2 - 10; - isOverTen = true; - } else { - l1.val = val1 + val2; - } - - prev = l1; - l1 = l1.next; - if (l2 !== null) { - l2 = l2.next; - } - } - - if (isOverTen) { - prev.next = new ListNode(1); - } - - return head; -}; -``` - - -### 6. [ZigZag Conversion](https://leetcode.com/problems/zigzag-conversion/description/) -```javascript -/** - * @param {string} s - * @param {number} numRows - * @return {string} - */ -var convert = function(s, numRows) { - var chars = s.split(''); - var arrs = []; - for(var k = 0; k < numRows; k++) { - arrs.push([]); - } - - var i = 0; - while(i < chars.length) { - for(var x = 0; x < numRows && i < chars.length; x++) { - arrs[x].push(chars[i++]); - } - for(var x = numRows - 2; x > 0 && i < chars.length; x--) { - arrs[x].push(chars[i++]); - } - } - - var ret = ''; - arrs.map(function(item) { - ret = ret.concat(item.join('')); - }); - return ret; -}; -``` - - -### 7. [Reverse Integer](https://leetcode.com/problems/reverse-integer/description/) -```javascript -/** - * @param {number} x - * @return {number} - */ -var reverse = function(x) { - var flag = (x < 0 ? true : false); - x = Math.abs(x); - var reverse = parseInt(new String(x).split('').reverse().join(''), 10); - if(reverse > Math.pow(2, 31)) { - return 0; - } - if(flag) { - return 0 - reverse; - } else { - return reverse; - } - -}; -``` - - -### 8. [String to Integer (atoi)](https://leetcode.com/problems/string-to-integer-atoi/description/) -```javascript -/** - * @param {string} str - * @return {number} - */ -var myAtoi = function(str) { - var ret = parseInt(str, 10); - if(Number.isNaN(ret)) { - return 0; - } - if(ret > 2147483647) { - return 2147483647; - } else if(ret < -2147483648) { - return -2147483648; - } else { - return ret; - } -}; -``` - - -### 9. [Palindrome Number](https://leetcode.com/problems/palindrome-number/description/) -```javascript -/** - * @param {number} x - * @return {boolean} - */ -var isPalindrome = function(x) { - x += ''; - var i = 0; - var j = x.length - 1; - while(i < j) { - if(x[i] != x[j]) { - return false - } - i++; - j--; - } - return true; -}; -``` - - -### 12. [Integer to Roman](https://leetcode.com/problems/integer-to-roman/description/) -```javascript -/** - * @param {number} num - * @return {string} - */ -var intToRoman = function(num) { - var M = ["", "M", "MM", "MMM"]; - var C = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]; - var X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]; - var I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; - - return [ - M[parseInt(num / 1000)], - C[parseInt((num % 1000) / 100)], - X[parseInt((num % 100) / 10)], - I[num % 10] - ].join(''); -}; -``` - - -### 13. [Roman to Integer](https://leetcode.com/problems/roman-to-integer/description/) -```javascript -/** - * @param {string} s - * @return {number} - * - * Symbol Value - * I 1 - * V 5 - * X 10 - * L 50 - * C 100 - * D 500 - * M 1,000 - - */ -var romanToInt = function(s) { - var map = { - 'I':1, - 'V':5, - 'X':10, - 'L':50, - 'C':100, - 'D':500, - 'M':1000 - }; - - var sum = 0; - var right = 'I'; - - for(var i = s.length - 1; i >=0; i--) { - if(i < s.length - 1) { - right = s[i + 1]; - } - if(map[s[i]] < map[right]) { - sum -= map[s[i]]; - } else { - sum += map[s[i]]; - right = s[i]; - } - } - return sum; -}; - -``` - - -### 14. [Longest Common Prefix](https://leetcode.com/problems/longest-common-prefix/description/) -```javascript -/** - * @param {string[]} strs - * @return {string} - */ -var longestCommonPrefix = function(strs) { - if (strs.length === 0) return ''; - if (strs.length === 0) return strs[1]; - - var ret = ''; - var isBreak = false; - var isCommon = true; - var char; - - for (var j = 0; j < strs[0].length; j++) { - char = strs[0][j]; - - for (var i = 1; i < strs.length; i++) { - if (strs[i].length <= j || strs[i][j] !== char) { - isBreak = true; - break; - } - } - if (isBreak) { - break; - } - ret += strs[0][j]; - } - return ret; -}; - -``` - - -### 15. [3Sum](https://leetcode.com/problems/3sum/description/) -```javascript -/** - * @param {number[]} nums - * @return {number[][]} - */ - -var threeSum = function(nums) { - var ret = []; - - nums = nums.sort((a, b) => a - b); - for (var i = 0; i + 2 < nums.length; i++) { - if (i > 0 && nums[i] == nums[i - 1]) { - continue; - } - - var j = i + 1, k = nums.length - 1; - var target = -nums[i]; - - while (j < k) { - if (nums[j] + nums[k] == target) { - ret.push([nums[i], nums[j], nums[k]]); - j++; - k--; - while (j < k && nums[j] == nums[j - 1]) j++; - while (j < k && nums[k] == nums[k + 1]) k--; - } else if (nums[j] + nums[k] > target) { - k--; - } else { - j++; - } - } - } - - return ret; -}; - -``` - - -### 16. [3Sum Closest](https://leetcode.com/problems/3sum-closest/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} target - * @return {number} - */ -var threeSumClosest = function(nums, target) { - var closet = Number.MAX_SAFE_INTEGER; - var closetTarget; - - nums = nums.sort((a, b) => a - b); - - for (var i = 0; i + 2 < nums.length; i++) { - if (i > 0 && nums[i] == nums[i - 1]) { - continue; - } - - var j = i + 1, k = nums.length - 1; - - while (j < k) { - if (Math.abs(nums[j] + nums[k] + nums[i] - target) < closet) { - closet = Math.abs(nums[j] + nums[k] + nums[i] - target); - closetTarget = nums[j] + nums[k] + nums[i]; - } - - if (nums[j] + nums[k] + nums[i] === target) { - return target; - } else if (nums[j] + nums[k] + nums[i] > target) { - k--; - } else { - j++; - } - } - } - - return closetTarget; -}; - -``` - - -### 17. [Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/) -```javascript -/** - * @param {string} digits - * @return {string[]} - */ -var letterCombinations = function(digits) { - if(digits.length === 0) { - return []; - } - - var map = { - 2: ['a', 'b', 'c'], - 3: ['d', 'e', 'f'], - 4: ['g', 'h', 'i'], - 5: ['j', 'k', 'l'], - 6: ['m', 'n', 'o'], - 7: ['p', 'q', 'r', 's'], - 8: ['t', 'u', 'v'], - 9: ['w', 'x', 'y', 'z'], - }; - - if(digits.length === 1) { - return map[digits]; - } else { - var front = map[digits.slice(0, 1)]; - var back = letterCombinations(digits.slice(1)); - var ret = []; - - front.forEach(f => { - back.forEach(b => { - ret.push(f + b); - }); - }); - - return ret; - } -}; - - -``` - - -### 19. [Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @param {number} n - * @return {ListNode} - */ -var removeNthFromEnd = function(head, n) { - var front = head; - var end = head; - for(var i = 0; i <= n && front; i++) { - front = front.next; - } - - // delete first node - if(i < n + 1) { - return head.next; - } - - while(front) { - front = front.next; - end = end.next; - } - end.next = end.next.next; - return head; -}; -``` - - -### 20. [Valid Parentheses](https://leetcode.com/problems/valid-parentheses/description/) -```javascript -/** - * @param {string} s - * @return {boolean} - */ -var isValid = function(s) { - var stack = []; - var match = { - ')': '(', - ']': '[', - '}': '{' - }; - var len; - for(var i = 0; i < s.length; i++) { - len = stack.length; - if(len > 0 && stack[len-1] == match[s[i]]) { - stack.pop(); - } else { - stack.push(s[i]); - } - } - return stack.length === 0; -}; - -``` - - -### 21. [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} l1 - * @param {ListNode} l2 - * @return {ListNode} - */ -var mergeTwoLists = function(l1, l2) { - if(!l1) return l2; - if(!l2) return l1; - var head = null - if(l1.val < l2.val) { - head = l1; - l1 = l1.next; - } else { - head = l2; - l2 = l2.next; - } - - newlist = head; - while(l1 && l2) { - if(l1.val < l2.val) { - newlist.next = l1; - l1 = l1.next; - } else { - newlist.next = l2; - l2 = l2.next; - } - newlist = newlist.next; - } - if(!l1) { - newlist.next = l2; - } else { - newlist.next = l1; - } - - return head; -}; -``` - - -### 22. [Generate Parentheses](https://leetcode.com/problems/generate-parentheses/description/) -```javascript -/** - * @param {number} n - * @return {string[]} - */ -var generateParenthesis = function(n) { - if(n === 0) { - return []; - } else if(n === 1){ - return ['()']; - } else { - var parenthesis = generateParenthesis(n - 1); - var retObj = {}; - - parenthesis.forEach(p => { - for(var i = 0; i < p.length + 1; i++) { - var charArr = p.split(''); - - charArr.splice(i, 0, '()'); - retObj[charArr.join('')] = true; - } - }); - - return Object.keys(retObj); - } -}; - -``` - - -### 24. [Swap Nodes in Pairs](https://leetcode.com/problems/swap-nodes-in-pairs/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var swapPairs = function(head) { - if(head === null || head.next === null) { - return head; - } - - var newhead = null; - var tmp1 = head.next; - var tmp2 = head.next.next; - head.next.next = head; - head.next = tmp2; - newhead = tmp1; - - var p = head; - while(p && p.next && p.next.next) { - tmp1 = p.next.next; - tmp2 = p.next.next.next; - p.next.next.next = p.next; - p.next.next = tmp2; - p.next = tmp1; - p = p.next.next; - } - - return newhead; -}; -``` - - -### 26. [Remove Duplicates from Sorted Array](https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var removeDuplicates = function(nums) { - var i = 0; - var j = 0; - while(j < nums.length) { - if(nums[i] == nums[j]) { - j++; - } else { - i++; - nums[i] = nums[j]; - j++; - } - } - return i + 1; - -}; -``` - - -### 27. [Remove Element](https://leetcode.com/problems/remove-element/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} val - * @return {number} - */ -var removeElement = function(nums, val) { - var head = 0; - var tail = nums.length - 1; - while(head <= tail) { - if(nums[head] != val) { - head++; - continue; - } - - if(nums[tail] == val) { - tail--; - continue; - } - - nums[head] = nums[tail]; - tail--; - } - return head; -}; -``` - - -### 28. [Implement strStr()](https://leetcode.com/problems/implement-strstr/description/) -```javascript -/** - * @param {string} haystack - * @param {string} needle - * @return {number} - */ - -var strStr = function(haystack, needle) { - if (needle === '') return 0; - for(var i = 0;; i++) { - for(var j = 0;; j++) { - if (j == needle.length) return i; - if (i + j >= haystack.length) return -1; - if (haystack[i + j] != needle[j]) break; - } - } - return -1; -}; - -``` - - -### 29. [Divide Two Integers](https://leetcode.com/problems/divide-two-integers/description/) -```cpp -class Solution { -public: - int divide(int dividend, int divisor) { - if (!divisor || (dividend == INT_MIN && divisor == -1)) - return INT_MAX; - int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1; - long long dvd = labs(dividend); - long long dvs = labs(divisor); - int res = 0; - while (dvd >= dvs) { - long long temp = dvs, multiple = 1; - while (dvd >= (temp << 1)) { - temp <<= 1; - multiple <<= 1; - } - dvd -= temp; - res += multiple; - } - return sign == 1 ? res : -res; - } -}; -``` - - -### 31. [Next Permutation](https://leetcode.com/problems/next-permutation/description/) -```javascript -var nextPermutation = function(nums) { - if (nums.length <= 1) { - return; - } - - var i = nums.length - 2; - var j = nums.length - 1; - while (nums[i] >= nums[i + 1] && i > -1) { - i--; - } - if (i >= 0) { - while (nums[j] <= nums[i]) { - j--; - } - - var temp; - temp = nums[i]; - nums[i] = nums[j]; - nums[j] = temp; - } - - var start = i + 1; - var end = nums.length - 1; - - while (start < end) { - temp = nums[start]; - nums[start] = nums[end]; - nums[end] = temp; - start++; - end--; - } - -}; -``` - - -### 33. [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} target - * @return {number} - */ -function binarySearch(nums, target) { - var end = nums.length - 1; - var start = 0; - var middle = parseInt((start + end) / 2); - - while (end >= start) { - if (nums[middle] == target) { - return middle; - } else if(nums[middle] > target) { - end = middle - 1; - } else if(nums[middle] < target) { - start = middle + 1; - } - middle = parseInt((start + end) / 2); - } - return -1; -} - -var search = function(nums, target) { - var i = 0; - while(nums[i] <= nums[i+1]) { - i++; - } - - if (nums[0] <= target && target <= nums[i]) { - return binarySearch(nums.slice(0, i + 1), target); - } else if (nums[i + 1] <= target && target <= nums[nums.length - 1]){ - var ret = binarySearch(nums.slice(i + 1), target); - return ret == -1 ? -1 : i + 1 + ret; - } else { - return -1; - } -}; - -``` - - -### 35. [Search Insert Position](https://leetcode.com/problems/search-insert-position/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} target - * @return {number} - */ -var searchInsert = function(nums, target) { - var start = 0; - var end = nums.length - 1; - var middle = parseInt((start + end) / 2); - - while(start <= end) { - if (target === nums[middle]) { - return middle; - } else if (target > nums[middle]) { - start = middle + 1; - } else if (target < nums[middle] ) { - end = middle - 1; - } - if (start > end) { - if (target < nums[middle]) { - return middle; - } else { - return middle + 1; - } - } else { - middle = parseInt((start + end) / 2); - } - } -}; -``` - - -### 36. [Valid Sudoku](https://leetcode.com/problems/valid-sudoku/description/) -```javascript -/** - * @param {character[][]} board - * @return {boolean} - */ -var isValidSudoku = function(board) { - var rowExist = {}; - var colExist = {}; - var boxExist = {}; - var k, value; - for (var i = 0; i < board.length; i++) { - for (var j = 0; j < board[i].length; j++) { - value = board[i][j]; - k = parseInt(i / 3, 10) * 3 + parseInt(j / 3, 10); //the number of the box - if (!rowExist[i]) { - rowExist[i] = {}; - } - if (!colExist[j]) { - colExist[j] = {}; - } - if (!boxExist[k]) { - boxExist[k] = {}; - } - - if (value !== '.') { - if (rowExist[i][value] || colExist[j][value] || boxExist[k][value]) { - return false; - } else { - rowExist[i][value] = true; - colExist[j][value] = true; - boxExist[k][value] = true; - } - } - } - } - return true; -}; -``` - - -### 38. [Count and Say](https://leetcode.com/problems/count-and-say/description/) -```javascript -/** - * @param {number} n - * @return {string} - */ - -var countAndSay = function(n) { - if (n === 1) return '1'; - - var last = countAndSay(n - 1); - var digit = last[0]; - var count = 0; - var ret = ''; - - for (var i = 0; i < last.length; i++) { - if (last[i] !== digit) { - ret += count + digit; - digit = last[i]; - count = 0; - } - count++; - } - ret += count + digit; - - return ret; -}; -``` - - -### 46. [Permutations](https://leetcode.com/problems/permutations/description/) -```javascript -/** - * @param {number[]} nums - * @return {number[][]} - */ -var permute = function(nums) { - var ret = []; - if(nums.length == 1) { - ret.push(nums); - return ret; - } - - var head, pre_ret, item, item_copy; - head = nums.shift(); - pre_ret = permute(nums); - for(var i = 0; i < pre_ret.length; i++ ) { - item = pre_ret[i]; - for(var j = 0; j <= item.length; j++) { - item_copy = [].slice.call(item); - item_copy.splice(j, 0, head); - ret.push(item_copy); - } - } - return ret; -}; -``` - - -### 53. [Maximum Subarray](https://leetcode.com/problems/maximum-subarray/description/) -```python -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - # dp[i] = dp[i - 1] + nums[i] (dp[i - i] > 0) - # dp[i] = nums[i] (dp[i - i] < 0) - dp = {} - dp[0] = nums[0] - maxv = nums[0] - - for i in range(1, len(nums)): - if dp[i - 1] > 0: - dp[i] = dp[i - 1] + nums[i] - else: - dp[i] = nums[i] - maxv = max(maxv, dp[i]) - - return maxv -``` - - -### 54. [Spiral Matrix](https://leetcode.com/problems/spiral-matrix/description/) -```javascript -/** - * @param {number[][]} matrix - * @return {number[]} - */ -var spiralOrder = function(matrix) { - if (matrix.length == 0) {return [];} - var n = matrix.length; - var m = matrix[0].length; - var up = 0, right = m - 1, down = n - 1, left = 0; - var ret = []; - - while(true) { - for(var r = left; r <= right; r++) ret.push(matrix[up][r]); - if (++up > down) break; - - for(var d = up; d <= down; d++) ret.push(matrix[d][right]); - if (--right < left) break; - - for(var l = right; l >= left; l--) ret.push(matrix[down][l]); - if (--down < up) break; - - for(var u = down; u >= up; u--) ret.push(matrix[u][left]); - if (++left > right) break; - } - return ret; -}; - -``` - - -### 58. [Length of Last Word](https://leetcode.com/problems/length-of-last-word/description/) -```javascript -/** - * @param {string} s - * @return {number} - */ -var lengthOfLastWord = function(s) { - return s.trim().split(' ').pop().length; -}; -``` - - -### 62. [Unique Paths](https://leetcode.com/problems/unique-paths/description/) -```javascript -/** - * @param {number} m - * @param {number} n - * @return {number} - */ -var uniquePaths = function(m, n) { - var dp = Array(n).fill(1).map(() => Array(m).fill(1)); - - for (var i = 1; i < n; i++) { - for (var j = 1; j < m; j++) { - dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; - } - } - - return dp[n - 1][m - 1]; -}; -``` - - -### 63. [Unique Paths II](https://leetcode.com/problems/unique-paths-ii/description/) -```javascript -/** - * @param {number[][]} obstacleGrid - * @return {number} - */ -var uniquePathsWithObstacles = function(obstacleGrid) { - var n = obstacleGrid.length; - var m = obstacleGrid[0].length; - - if (obstacleGrid[n - 1][m - 1] === 1 || obstacleGrid[0][0] === 1) return 0; - - var dp = Array(n).fill(null).map(() => Array(m).fill(0)); - for (var i = 0; i < m && obstacleGrid[0][i] === 0; i++) dp[0][i] = 1; - for (var j = 0; j < n && obstacleGrid[j][0] === 0; j++) dp[j][0] = 1; - - var top, left; - for (var i = 1; i < n; i++) { - for (var j = 1; j < m; j++) { - top = obstacleGrid[i - 1][j] === 1 ? 0 : dp[i - 1][j]; - left = obstacleGrid[i][j - 1] === 1 ? 0 : dp[i][j - 1]; - dp[i][j] = top + left; - } - } - - return dp[n - 1][m - 1]; -}; -``` - - -### 66. [Plus One](https://leetcode.com/problems/plus-one/description/) -```javascript -/** - * @param {number[]} digits - * @return {number[]} - */ -var plusOne = function(digits) { - digits.unshift(0); - var tail = digits.length - 1; - digits[tail]++; - while(tail > 0) { - if(digits[tail] == 10) { - digits[tail] = 0; - tail--; - digits[tail]++; - } else { - tail--; - } - } - if(digits[0] == 0) { - digits.shift(); - } - return digits; -}; -``` - - -### 69. [Sqrt(x)](https://leetcode.com/problems/sqrtx/description/) -```javascript -/** - * @param {number} x - * @return {number} - */ -var mySqrt = function(x) { - var start = 1; - var end = x; - var middle; - - while (start <= end) { - middle = start + parseInt((end - start) / 2); - if (x / middle === middle) { - return middle; - } else if (x / middle > middle) { - start = middle + 1; - } else { - end = middle - 1; - } - } - - return end; -}; - -``` - - -### 70. [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/description/) -```python -class Solution(object): - def climbStairs(self, n): - """ - :type n: int - :rtype: int - """ - # dp[i] 爬i阶台阶有多少种方式 - # dp[i] = dp[i - 1] + dp[i - 2] - dp = {} - dp[1] = 1 - dp[2] = 2 - - for i in range(3, n + 1): - dp[i] = dp[i - 1] + dp[i - 2] - - return dp[n] - -``` - - -### 73. [Set Matrix Zeroes](https://leetcode.com/problems/set-matrix-zeroes/description/) -```javascript -/** - * @param {number[][]} matrix - * @return {void} Do not return anything, modify matrix in-place instead. - */ -var setZeroes = function(matrix) { - var hasZeroFirstCol = false; - for(var i = 0; i < matrix.length; i++) { - if(matrix[i][0] === 0) { - hasZeroFirstCol = true; - } - for(var j = 1; j < matrix[i].length; j++) { - if(matrix[i][j] === 0) { - matrix[0][j] = matrix[i][0] = 0; - } - } - } - for(var y = matrix.length - 1; y >= 0; y--) { - for(var x = matrix[y].length - 1; x >= 1; x--) { - if(matrix[0][x] === 0 || matrix[y][0] === 0) { - matrix[y][x] = 0; - } - } - if(hasZeroFirstCol) { - matrix[y][0] = 0; - } - } -}; -``` - - -### 83. [Remove Duplicates from Sorted List](https://leetcode.com/problems/remove-duplicates-from-sorted-list/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var deleteDuplicates = function(head) { - var iter = head; - while(iter) { - if(iter.next && iter.val === iter.next.val) { - iter.next = iter.next.next; - } else { - iter = iter.next; - } - } - return head; -}; -``` - - -### 88. [Merge Sorted Array](https://leetcode.com/problems/merge-sorted-array/description/) -```javascript -/** - * @param {number[]} nums1 - * @param {number} m - * @param {number[]} nums2 - * @param {number} n - * @return {void} Do not return anything, modify nums1 in-place instead. - */ -var merge = function(nums1, m, nums2, n) { - while(n > 0) { - if(m <= 0 || nums1[m - 1] <= nums2[n -1]) { - nums1[m + n - 1] = nums2[n - 1]; - n--; - } else { - nums1[m + n - 1] = nums1[m - 1]; - m--; - } - } -}; -``` - - -### 92. [Reverse Linked List II](https://leetcode.com/problems/reverse-linked-list-ii/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @param {number} m - * @param {number} n - * @return {ListNode} - */ - -var reverseBetween = function(head, m, n) { - function reverseList(head) { - if(!head) { - return head; - } - var prev = null; - var next = null; - while(head) { - next = head.next; - head.next = prev; - prev = head; - head = next; - } - return prev; - } - if(m === n) { - return head; - } - var middleLeft = null; - var middleRight = null; - var left = null; - var right = null; - - var i = 1; - var point = head; - while(point) { - if(i + 1 === m) { - left = point; - } - if(i === m) { - middleLeft = point; - } - if(i === n) { - middleRight = point; - } - if(i === n + 1) { - right = point; - } - i++; - point = point.next; - } - if(left) { - left.next = null; - } - - middleRight.next = null; - reverseList(middleLeft); - middleLeft.next = right; - - if(left) { - left.next = middleRight; - return head; - } else { - return middleRight; - } -}; - -``` - - -### 94. [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/description/) -```python -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def inorder(self, root, list): - if root == None: - return - self.inorder(root.left, list) - list.append(root.val) - self.inorder(root.right, list) - - def inorderTraversal(self, root): - l = [] - self.inorder(root, l) - return l -``` - - -### 98. [Validate Binary Search Tree](https://leetcode.com/problems/validate-binary-search-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {boolean} - */ -function isValid(root, max, min) { - if (root === null) return true; - if (root.val >= max || root.val <= min) return false; - - return isValid(root.left, root.val, min) && isValid(root.right, max, root.val); -} -var isValidBST = function(root) { - return isValid(root, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER); -}; - -``` - - -### 100. [Same Tree](https://leetcode.com/problems/same-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} p - * @param {TreeNode} q - * @return {boolean} - */ -var isSameTree = function(p, q) { - if(p == null || q == null) { - return p == q; - } - if(p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right)) { - return true; - } else { - return false; - } -}; -``` - - -### 101. [Symmetric Tree](https://leetcode.com/problems/symmetric-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {boolean} - */ - -var isSymmetric = function(root) { - function isSymmetricNode(left, right) { - if(!left && !right) { - return true; - } - if((left && !right) || (!left && right)) { - return false; - } - return (left.val == right.val) - && isSymmetricNode(left.left, right.right) - && isSymmetricNode(left.right, right.left); - } - if(root === null) { - return true; - } - var left = root.left; - var right = root.right; - return isSymmetricNode(left, right); -}; - -``` - - -### 102. [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[][]} - */ -var traversal = function(ret, root, depth) { - if(root === null) { - return; - } - if(!Array.isArray(ret[depth])) { - ret[depth] = []; - } - ret[depth].push(root.val); - traversal(ret, root.left, depth + 1); - traversal(ret, root.right, depth + 1); -} -var levelOrder = function(root) { - var ret = []; - traversal(ret, root, 0); - return ret; -}; -``` - - -### 104. [Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ -var maxDepth = function(root) { - if(root == null) { - return 0; - } else { - return Math.max(maxDepth(root.left), maxDepth(root.right)) +1; - } -}; -``` - - -### 107. [Binary Tree Level Order Traversal II](https://leetcode.com/problems/binary-tree-level-order-traversal-ii/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[][]} - */ -var traversal = function(ret, root, depth) { - if(root === null) { - return; - } - if(!Array.isArray(ret[depth])) { - ret[depth] = []; - } - ret[depth].push(root.val); - traversal(ret, root.left, depth + 1); - traversal(ret, root.right, depth + 1); -} -var levelOrderBottom = function(root) { - var ret = []; - traversal(ret, root, 0); - return ret.reverse(); -}; -``` - - -### 108. [Convert Sorted Array to Binary Search Tree](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {number[]} nums - * @return {TreeNode} - */ - -var sortedArrayToBST = function(nums) { - if (nums.length === 0) {return null;} - var start = 0; - var end = nums.length - 1; - var middle = parseInt((start + end) / 2); - - var root, node1, node2, node3; - - if (nums.length <= 3) { - node1 = new TreeNode(nums[0]); - if (nums.length === 1) { - return node1; - } - - node2 = new TreeNode(nums[1]); - node2.left = node1; - if (nums.length === 2) { - return node2; - } - - node3 = new TreeNode(nums[2]); - node2.right = node3; - return node2; - - } else { - root = new TreeNode(nums[middle]); - root.left = sortedArrayToBST(nums.slice(0, middle)); - root.right = sortedArrayToBST(nums.slice(middle + 1)); - } - return root; -}; -``` - - -### 110. [Balanced Binary Tree](https://leetcode.com/problems/balanced-binary-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {boolean} - */ -var maxDeepth = function(root) { - if(root === null) { - return 0; - } else { - return Math.max(maxDeepth(root.left), maxDeepth(root.right)) + 1; - } -} -var isBalanced = function(root) { - if(root === null) { - return true; - } - var leftDeepth = maxDeepth(root.left); - var rightDeepth = maxDeepth(root.right); - - if(Math.abs(leftDeepth - rightDeepth) <= 1 - && isBalanced(root.left) - && isBalanced(root.right) - ) { - return true; - } else { - return false; - } -}; -``` - - -### 111. [Minimum Depth of Binary Tree](https://leetcode.com/problems/minimum-depth-of-binary-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ -var minDepth = function(root) { - if(root === null) { - return 0; - } - var leftDepth = minDepth(root.left); - var rightDepth = minDepth(root.right); - - if(leftDepth !== 0 && rightDepth !== 0) { - return Math.min(leftDepth, rightDepth) + 1; - } else if(leftDepth === 0) { - return rightDepth + 1; - } else { - return leftDepth + 1; - } -}; -``` - - -### 112. [Path Sum](https://leetcode.com/problems/path-sum/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {number} sum - * @return {boolean} - */ -var hasPathSum = function(root, sum) { - if(root == null) { - return false; - } - if(root.left == null && root.right == null && sum == root.val) { - return true; - } - if(hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val)) { - return true; - } else { - return false; - } -}; -``` - - -### 118. [Pascal's Triangle](https://leetcode.com/problems/pascals-triangle/description/) -```javascript -/** - * @param {number} numRows - * @return {number[][]} - */ -var generate = function(numRows) { - if(numRows === 0) { - return []; - } - if(numRows === 1) { - return [[1]]; - } - - var ret = [[1]]; - for(var i = 1; i < numRows; i++) { - ret.push([]); - for(var j = 0; j < ret[i - 1].length - 1; j++) { - ret[i].push(ret[i-1][j] + ret[i-1][j + 1]); - } - ret[i].unshift(1); - ret[i].push(1); - } - return ret; -}; -``` - - -### 119. [Pascal's Triangle II](https://leetcode.com/problems/pascals-triangle-ii/description/) -```javascript -/** - * @param {number} rowIndex - * @return {number[]} - */ -var getRow = function(rowIndex) { - var ret = []; - ret[0] = 1; - for(var i = 1; i <= rowIndex; i++ ) { - ret[i] = 1; - for(j = i - 1; j > 0; j--) { - ret[j] = ret[j] + ret[j - 1]; - } - } - return ret; -}; -``` - - -### 120. [Triangle](https://leetcode.com/problems/triangle/description/) -```javascript -/** - * @param {number[][]} triangle - * @return {number} - */ -var minimumTotal = function(triangle) { - if (triangle.length === 0 || triangle[0].length === 0) return 0; - var dp = Array(triangle.length).fill(null); - dp[0] = triangle[0][0]; - var minv = dp[0]; - var prev; - - for (var i = 1; i < triangle.length; i++) { - prev = dp.slice(); // copy dp - dp[0] = prev[0] + triangle[i][0]; - for (var j = 1; j < triangle[i].length - 1; j++) { - dp[j] = Math.min(prev[j - 1], prev[j]) + triangle[i][j]; - } - dp[triangle[i].length - 1] = prev[triangle[i].length - 2] + triangle[i][triangle[i].length - 1]; - } - - return Math.min.apply(null, dp); -}; -``` - - -### 121. [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/) -```javascript -/** - * @param {number[]} prices - * @return {number} - */ -var maxProfit = function(prices) { - var min = Number.MAX_VALUE; - var profit = 0; - - for(var i = 0; i < prices.length; i++) { - min = Math.min(min, prices[i]); - profit = Math.max(profit, prices[i] - min); - } - - return profit; -}; -``` - - -### 122. [Best Time to Buy and Sell Stock II](https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/description/) -```javascript -/** - * @param {number[]} prices - * @return {number} - */ -var maxProfit = function(prices) { - var len = prices.length; - var minsum = 0; - var maxsum = 0; - var isUp; - var lastIsUp; - - for(var i = 0; i < prices.length - 1; i++) { - if(prices[i] < prices[i+1]) { - isUp = true; - } else { - isUp = false; - } - if(isUp && (i === 0 || lastIsUp === false)) { - minsum += prices[i]; - } - if(lastIsUp && isUp === false) { - maxsum += prices[i]; - } - if(isUp && i === prices.length - 2) { - maxsum += prices[i + 1]; - } - lastIsUp = isUp; - } - return maxsum - minsum; -}; -``` - - -### 125. [Valid Palindrome](https://leetcode.com/problems/valid-palindrome/description/) -```javascript -/** - * @param {string} s - * @return {boolean} - */ -var isPalindrome = function(s) { - var str = s.split('').filter(function(c) { - return c.match(/[\w\d]/); - }).join('').toLowerCase(); - - if(str === '') { - return true; - } - var i = 0; - var j = str.length - 1; - while(i < j) { - if(str[i] != str[j]) { - return false; - } - i++; - j--; - } - return true; -}; -``` - - -### 136. [Single Number](https://leetcode.com/problems/single-number/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var singleNumber = function(nums) { - return nums.reduce(function(prev, cur) { - return prev ^ cur; - }); -}; -``` - - -### 138. [Copy List with Random Pointer](https://leetcode.com/problems/copy-list-with-random-pointer/description/) -```javascript -/** - * Definition for singly-linked list with a random pointer. - * function RandomListNode(label) { - * this.label = label; - * this.next = this.random = null; - * } - */ - -/** - * @param {RandomListNode} head - * @return {RandomListNode} - */ - -var copyLinkList = function(head) { - if (head === null) { - return null; - } - - var new_head = new RandomListNode(head.label); - var new_current = new_head; - var node; - - head = head.next; - while(head !== null) { - node = new RandomListNode(head.label); - new_current.next = node; - new_current = node; - head = head.next; - } - - return new_head; -}; - -var copyRandomList = function(head) { - if (head === null) { - return null; - } - - var new_head = copyLinkList(head); - var new_list = []; - var old_list = []; - - var new_curr = new_head; - var old_curr = head; - while (new_curr !== null) { - new_list.push(new_curr); - old_list.push(old_curr); - new_curr = new_curr.next; - old_curr = old_curr.next; - } - - for (var i = 0; i < new_list.length; i++) { - new_list[i].random = old_list[i]; - old_list[i].next = new_list[i]; - } - - for (i = 0; i < new_list.length; i++) { - if (old_list[i].random === null) { - new_list[i].random = null; - } else { - new_list[i].random = old_list[i].random.next; - } - } - - for (i = 0; i < old_list.length - 1; i++) { - old_list[i].next = old_list[i + 1]; - } - old_list[old_list.length - 1].next = null; - - - return new_head; -}; - - -``` - - -### 139. [Word Break](https://leetcode.com/problems/word-break/description/) -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: bool - """ - - #dp[i] measn word[:i+1] can be segmented - - dp = {} - dp[0] = True - for i in range(1, len(s) + 1): - for j in range(0, i): - if dp.get(j, False) and s[j:i] in wordDict: - dp[i] = True - - return dp.get(len(s), False) -``` - - -### 141. [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ - -/** - * @param {ListNode} head - * @return {boolean} - */ -var hasCycle = function(head) { - if (head === null) {return false;} - var fast = head; - var slow = head; - - while(slow.next !== null && slow.next.next !== null) { - fast = fast.next; - slow = slow.next.next; - if (slow === fast) return true; - } - - return false; -}; -``` - - -### 144. [Binary Tree Preorder Traversal](https://leetcode.com/problems/binary-tree-preorder-traversal/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ - -var preorderTraversal = function(root) { - if(root === null) return []; - var ret = []; - - function pre(root) { - if(root) { - ret.push(root.val); - pre(root.left); - pre(root.right); - } - } - pre(root); - return ret; -}; -``` - - -### 146. [LRU Cache](https://leetcode.com/problems/lru-cache/description/) -```python -class Node: - def __init__(self, k, v): - self.key = k - self.val = v - self.prev = None - self.next = None - -class LRUCache(object): - - def __init__(self, capacity): - """ - :type capacity: int - """ - self.capacity = capacity - self.head = Node('head', None) - self.tail = Node('tail', None) - self.map = {} - self.head.next = self.tail - self.tail.prev = self.head - - - def get(self, key): - """ - :type key: int - :rtype: int - """ - if not self.map.has_key(key): - return -1 - target = self.map[key] - self._remove(target) - self._add(target) - return target.val - - def put(self, key, value): - """ - :type key: int - :type value: int - :rtype: void - """ - if self.map.has_key(key): - self._remove(self.map[key]) - target = Node(key, value) - self._add(target) - self.map[key] = target - - if len(self.map) > self.capacity: - delete_node = self.head.next - self._remove(delete_node) - del self.map[delete_node.key] - - # add before the tail - def _add(self, node): - p_node = self.tail.prev - p_node.next = node - node.next = self.tail - self.tail.prev = node - node.prev = p_node - - # remove the node - def _remove(self, node): - p_node = node.prev - n_node = node.next - p_node.next = n_node - n_node.prev = p_node - -``` - - -### 148. [Sort List](https://leetcode.com/problems/sort-list/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var sortList = function(head) { - function merge(l1, l2) { - if(!l1) return l2; - if(!l2) return l1; - var head = null - if(l1.val < l2.val) { - head = l1; - l1 = l1.next; - } else { - head = l2; - l2 = l2.next; - } - var newlist = head; - while(l1 && l2) { - if(l1.val < l2.val) { - newlist.next = l1; - l1 = l1.next; - } else { - newlist.next = l2; - l2 = l2.next; - } - newlist = newlist.next; - } - if(!l1) { - newlist.next = l2; - } else { - newlist.next = l1; - } - return head; - } - - if(!head || !head.next) { - return head; - } - - var p1 = head; - var p2 = head; - - // p1 go step 1 - // p2 go step 2 - while(p1 && p2) { - p2 = p2.next; - if(p2) { - p2 = p2.next; - } - if(!p2) { - break; - } - p1 = p1.next; - } - - var right = p1.next; - p1.next = null; - var left = head; - - return merge(sortList(left), sortList(right)); -} -``` - - -### 149. [Max Points on a Line](https://leetcode.com/problems/max-points-on-a-line/description/) -```cpp -/** - * Definition for a point. - * struct Point { - * int x; - * int y; - * Point() : x(0), y(0) {} - * Point(int a, int b) : x(a), y(b) {} - * }; - */ -class Solution { -public: - int maxPoints(vector &points) { - if(points.size() < 3) { - return points.size(); - } - int maxPoints = 0; //the max point in line - int size = points.size(); - map count; - map::iterator iter; - for(int i = 0; i < size; i++ ) { - int x1 = points[i].x; - int y1 = points[i].y; - int coincideCount = 0; //number of duplicate points - count.clear(); - count[(double)INT_MIN] = 0; - for(int j = i + 1; j < size; j++) { - int x2 = points[j].x; - int y2 = points[j].y; - if(x1 == x2 && y1 == y2) { - coincideCount++; - } else if(x1 == x2){ - count[(double)INT_MIN]++; - } else { - double slope = 1.0*(y1-y2)/(x1-x2); - count[slope]++; - } - } - for(iter = count.begin(); iter != count.end(); iter++) { - if(iter->second + coincideCount > maxPoints) { - maxPoints = iter->second + coincideCount; - } - } - } - maxPoints = maxPoints + 1; - return maxPoints; - } -}; -``` - - -### 150. [Evaluate Reverse Polish Notation](https://leetcode.com/problems/evaluate-reverse-polish-notation/description/) -```javascript -/** - * @param {string[]} tokens - * @return {number} - */ - var evalRPN = function(tokens) { - var stack = []; - var a, b, result; - for(var i = 0; i < tokens.length; i++) { - if(Number.isNaN(parseInt(tokens[i]))) { - b = stack.pop(); - a = stack.pop(); - if(tokens[i] == '+') { - result = a + b; - } else if(tokens[i] == '-') { - result = a - b; - } else if(tokens[i] == '*') { - result = a * b; - } else if(tokens[i] == '/') { - result = a / b; - } - stack.push(parseInt(result, 10)); - } else { - stack.push(parseInt(tokens[i], 10)); - } - } - return stack.pop(); -}; -``` - - -### 151. [Reverse Words in a String](https://leetcode.com/problems/reverse-words-in-a-string/description/) -```javascript -/** - * @param {string} str - * @returns {string} - */ -var reverseWords = function(str) { - return str.split(' ').reverse().filter(function(item) { - return '' != item; - }).join(' ').trim(); -}; -``` - - -### 152. [Maximum Product Subarray](https://leetcode.com/problems/maximum-product-subarray/description/) -```python -class Solution(object): - def maxProduct(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - ret = maxv = minv = nums[0] - - for i in nums[1:]: - if i >= 0: - maxv = max(i, maxv * i) - minv = min(i, minv * i) - else: - maxv_tmp = maxv - maxv = max(i, minv * i) - minv = min(i, maxv_tmp * i) - - ret = max(ret, maxv) - - return ret -``` - - -### 155. [Min Stack](https://leetcode.com/problems/min-stack/description/) -```javascript -/** - * @constructor - */ -var MinStack = function() { - this.stack = []; - this.min = Number.MAX_SAFE_INTEGER; -}; - -/** - * @param {number} x - * @returns {void} - */ -MinStack.prototype.push = function(x) { - if(x < this.min) { - this.min = x; - } - this.stack.push(x); -}; - -/** - * @returns {void} - */ -MinStack.prototype.pop = function() { - var number = this.stack.pop(); - if(number == this.min) { - this.min = Math.min.apply(null, this.stack); - } -}; - -/** - * @returns {number} - */ -MinStack.prototype.top = function() { - if(this.stack.length > 0) { - return this.stack[this.stack.length - 1]; - } else { - return undefined; - } -}; - -/** - * @returns {number} - */ -MinStack.prototype.getMin = function() { - return this.min; -}; -``` - - -### 160. [Intersection of Two Linked Lists](https://leetcode.com/problems/intersection-of-two-linked-lists/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ - -/** - * @param {ListNode} headA - * @param {ListNode} headB - * @return {ListNode} - */ -var getIntersectionNode = function(headA, headB) { - if(headA === null || headB === null) { - return null; - } - var pointA = headA; - var pointB = headB; - var i = 0; - var j = 0; - var k = 0; - while(pointA.next !== null) { - pointA = pointA.next; - i++; - } - while(pointB.next !== null) { - pointB = pointB.next; - j++; - } - if(pointB != pointA) { - return null; - } - pointA = headA; - pointB = headB; - - if(i > j) { - while(k < i - j){pointA = pointA.next;k++;} - } else { - while(k < j - i){pointB = pointB.next;k++;} - } - while(pointA != pointB) { - pointA = pointA.next; - pointB = pointB.next; - } - return pointA; -}; -``` - - -### 162. [Find Peak Element](https://leetcode.com/problems/find-peak-element/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ - -function find(nums, low, high) { - if (low === high) { - return low; - } else { - var mid1 = parseInt((low + high) / 2); - var mid2 = mid1 + 1; - - if (nums[mid1] > nums[mid2]) { - return find(nums, low, mid1); - } else { - return find(nums, mid2, high); - } - } -} -var findPeakElement = function(nums) { - return find(nums, 0, nums.length - 1); -}; - -``` - - -### 165. [Compare Version Numbers](https://leetcode.com/problems/compare-version-numbers/description/) -```javascript -/** - * @param {string} version1 - * @param {string} version2 - * @return {number} - */ -var compareVersion = function(version1, version2) { - var arr1 = version1.split('.').map(function(item) { - return parseInt(item); - }); - var arr2 = version2.split('.').map(function(item) { - return parseInt(item); - }); - var a, b; - for(var i = 0; i < arr1.length || i < arr2.length; i++) { - a = i >= arr1.length ? 0 : arr1[i]; - b = i >= arr2.length ? 0 : arr2[i]; - if(a > b) { - return 1; - } else if(a < b) { - return -1; - } - } - return 0; -}; -``` - - -### 166. [Fraction to Recurring Decimal](https://leetcode.com/problems/fraction-to-recurring-decimal/description/) -```javascript -/** - * @param {number} numerator - * @param {number} denominator - * @return {string} - */ -var fractionToDecimal = function(numerator, denominator) { - // be divided with no remainder - if (numerator % denominator === 0) { - return String(numerator / denominator); - } - - // plus or minus - var ret = ''; - if (numerator * denominator < 0) ret += '-'; - numerator = Math.abs(numerator); - denominator = Math.abs(denominator); - - // integral part - var remain; - ret += Math.floor(numerator / denominator) + '.'; - remain = numerator % denominator; - - // decimal part - var digit; - var decimal = ''; - var i = 0; - var remainIndexMap = {}; - /* - * remain and the decimal part index - * e.g. 2 / 333 = 0.(006) - * remainIndexMap['2'] = 0; - * remainIndexMap['20'] = 1; - * remainIndexMap['200'] = 2; - * The decimal is 006 - */ - remainIndexMap[remain] = 0; - - while (true) { - remain *= 10; - digit = Math.floor(remain / denominator); - decimal += digit; - remain = remain % denominator; - - if (remainIndexMap[remain] !== undefined) { - ret += `${decimal.slice(0, remainIndexMap[remain])}(${decimal.slice(remainIndexMap[remain])})`; - break; - } else { - remainIndexMap[remain] = ++i; - } - - if (remain === 0) { - ret += decimal; - break; - } - } - - return ret; -}; - - -``` - - -### 167. [Two Sum II - Input array is sorted](https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/description/) -```javascript -/** - * @param {number[]} numbers - * @param {number} target - * @return {number[]} -*/ -var twoSum = function(numbers, target) { - var start = 0; - var end = numbers.length - 1; - - while (start < end) { - if (numbers[start] + numbers[end] === target) { - break; - } else if (numbers[start] + numbers[end] < target) { - start++; - } else { - end--; - } - } - - return [start + 1, end + 1]; -}; - -``` - - -### 168. [Excel Sheet Column Title](https://leetcode.com/problems/excel-sheet-column-title/description/) -```javascript -/** - * @param {number} n - * @return {string} - */ -var convertToTitle = function(n) { - var ret = '' - while(n > 0) { - n--; - ret = String.fromCharCode(65 + n % 26) + ret; - n = Math.floor(n / 26); - } - return ret; -}; -``` - - -### 169. [Majority Element](https://leetcode.com/problems/majority-element/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var majorityElement = function(nums) { - var count = 1; - var item = nums[0]; - for(var i = 1; i < nums.length; i++) { - if(count === 0) { - count = 1; - item = nums[i]; - } else { - if(nums[i] == item) { - count++; - } else { - count--; - } - } - } - return item; -}; -``` - - -### 170. [Two Sum III - Data structure design](https://leetcode.com/problems/two-sum-iii-data-structure-design/description/) -```python -class TwoSum: - - # initialize your data structure here - def __init__(self): - self.table = dict() - - # @return nothing - def add(self, number): - self.table[number] = self.table.get(number, 0) + 1; - - # @param value, an integer - # @return a Boolean - def find(self, value): - for i in self.table.keys(): - j = value - i - if i == j and self.table.get(i) > 1 or i != j and self.table.get(j, 0) > 0: - return True - return False -``` - - -### 171. [Excel Sheet Column Number](https://leetcode.com/problems/excel-sheet-column-number/description/) -```javascript -/** - * @param {string} s - * @return {number} - */ -var titleToNumber = function(s) { - var arr = s.split(''); - var digit; - var sum = 0; - for(var i = arr.length - 1, j = 0; i >= 0; i--, j++) { - digit = arr[i].charCodeAt(0) - 64; - sum += digit * Math.pow(26, j) - } - return sum; -}; -``` - - -### 172. [Factorial Trailing Zeroes](https://leetcode.com/problems/factorial-trailing-zeroes/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var trailingZeroes = function(n) { - var sum = 0; - var divisor = 5; - while(n >= divisor) { - sum += Math.floor(n / divisor); - divisor *= 5; - } - return sum; -}; -``` - - -### 173. [Binary Search Tree Iterator](https://leetcode.com/problems/binary-search-tree-iterator/description/) -```javascript -/** - * Definition for binary tree - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ - -/** - * @constructor - * @param {TreeNode} root - root of the binary search tree - */ -var BSTIterator = function(root) { - this.root = root; - this.stack = []; - this._push(this.root); -}; - - -/** - * @this BSTIterator - * @returns {boolean} - whether we have a next smallest number - */ -BSTIterator.prototype.hasNext = function() { - return this.stack.length > 0; -}; - -/** - * @this BSTIterator - * @returns {number} - the next smallest number - */ -BSTIterator.prototype.next = function() { - if (this.stack.length > 0) { - var node = this.stack.pop(); - this._push(node.right); - - return node.val; - } -}; - -BSTIterator.prototype._push = function(curr) { - while (curr) { - this.stack.push(curr); - curr = curr.left; - } -}; - -/** - * Your BSTIterator will be called like this: - * var i = new BSTIterator(root), a = []; - * while (i.hasNext()) a.push(i.next()); -*/ -``` - - -### 179. [Largest Number](https://leetcode.com/problems/largest-number/description/) -```javascript -/** - * @param {number[]} nums - * @return {string} - */ -var largestNumber = function(nums) { - var retStr = nums.sort(function(num1, num2) { - var arr1 = num1 + ''.split(); - var arr2 = num2 + ''.split(); - var len1 = arr1.length; - var len2 = arr2.length; - var a, b; - - for (var i = 0; i < len1 || i < len2; i++) { - a = i >= arr1.length ? arr1[i % len1] : arr1[i]; - b = i >= arr2.length ? arr2[i % len2] : arr2[i]; - if (a != b) { - return b - a; - } - } - - var isRise; - var checkArr = len1 > len2 ? arr1 : arr2; - for (var j = 0; j < checkArr.length - 1; j++) { - if (checkArr[j] != checkArr[j + 1]) { - if (checkArr[j] > checkArr[j + 1]) { - isRise = false; - break; - } else { - isRise = true; - break; - } - } - } - if (isRise) { - return len1 - len2; - } else { - return len2 - len1; - } - - - }).join(''); - - if (retStr[0] == '0') { - return '0'; - } else { - return retStr; - } -}; -``` - - -### 187. [Repeated DNA Sequences](https://leetcode.com/problems/repeated-dna-sequences/description/) -```javascript -/** -* @param {string} s -* @return {string[]} -*/ -var findRepeatedDnaSequences = function(s) { - var ret = []; - var uniqMap = {}; - var valueMap = {}; - var charCodeA = 'A'.charCodeAt(0); - - valueMap['A'.charCodeAt(0) - charCodeA] = 0; - valueMap['C'.charCodeAt(0) - charCodeA] = 1; - valueMap['G'.charCodeAt(0) - charCodeA] = 2; - valueMap['T'.charCodeAt(0) - charCodeA] = 3; - - var bitValue = 0; - var offset = 0; - for (var i = 0; i < s.length - 9; i++) { - for (var j = i; j < i + 10; j++) { - bitValue |= valueMap[s.charCodeAt(j) - charCodeA] << offset; - offset += 2; - } - if (uniqMap[bitValue] === undefined) { - uniqMap[bitValue] = true; - } else if (uniqMap[bitValue] === true) { - ret.push(s.slice(i, 10 + i)); - uniqMap[bitValue] = false; - } - - offset = 0; - bitValue = 0; - } - - return ret; -}; - -``` - - -### 189. [Rotate Array](https://leetcode.com/problems/rotate-array/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} k - * @return {void} Do not return anything, modify nums in-place instead. - */ -var rotate = function(nums, k) { - for(var i = 0; i < k; i++) { - nums.unshift(nums.pop()); - } -}; -``` - - -### 190. [Reverse Bits](https://leetcode.com/problems/reverse-bits/description/) -```c -uint32_t reverseBits(uint32_t n) { - uint32_t mask = 1 << 31; - uint32_t ret = 0; - - for (uint32_t i = 0; i < 32; i++) { - if (n & 1 == 1) { - ret = ret | mask; - } - n = n >> 1; - mask = mask >> 1; - } - - return ret; -} - -``` - - -### 191. [Number of 1 Bits](https://leetcode.com/problems/number-of-1-bits/description/) -```javascript -/** - * @param {number} n - a positive integer - * @return {number} - */ -var hammingWeight = function(n) { - var count = 0; - while (n) { - n = n & (n - 1); - count++; - } - - return count; -}; -``` - - -### 198. [House Robber](https://leetcode.com/problems/house-robber/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var rob = function(nums) { - if(nums.length === 0) { - return 0; - } - if(nums.length === 1) { - return nums[0]; - } - - var max = {}; - max[0] = nums[0]; - max[1] = Math.max(nums[0], nums[1]); - for(var i = 2; i < nums.length; i++) { - max[i] = Math.max(max[i - 2] + nums[i], max[i -1]); - } - return max[nums.length - 1]; -}; -``` - - -### 200. [Number of Islands](https://leetcode.com/problems/number-of-islands/description/) -```javascript -/** - * @param {character[][]} grid - * @return {number} - */ -var numIslands = function(grid) { - var m = grid.length; - if (m === 0) return 0; - var n = grid[0].length; - - var island = []; - for (var i = 0; i < m; i++) { - for (var j = 0; j < n; j++) { - if(grid[i][j] === '1') { - island.push([i, j]); - grid[i][j] = false; - } - } - } - function nextUnvisit(island) { - for (var k = 0; k < island.length; k++) { - var [i, j] = island[k]; - if (grid[i][j] === false) { - return [i, j]; - } - } - return null; - } - - var count = 0; - while(nextUnvisit(island) !== null) { - count++; - var queue = []; - queue.push(nextUnvisit(island)); - while (queue.length > 0) { - var [i, j] = queue.pop(); - grid[i][j] = true; - var list = [[-1, 0], [1, 0], [0, -1], [0, 1]]; - for(var key in list) { - var [p, q] = list[key]; - var x = i + p; - var y = j + q; - if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] === false) { - queue.push([x, y]); - } - } - } - } - - return count; -}; - -``` - - -### 201. [Bitwise AND of Numbers Range](https://leetcode.com/problems/bitwise-and-of-numbers-range/description/) -```javascript -/** - * @param {number} m - * @param {number} n - * @return {number} - */ -var rangeBitwiseAnd = function(m, n) { - var count = 0; - - while (m !== n) { - m = m >> 1; - n = n >> 1; - count++; - } - - return m << count; -}; -``` - - -### 202. [Happy Number](https://leetcode.com/problems/happy-number/description/) -```javascript -/** - * @param {number} n - * @return {boolean} - */ - -var isHappy = function(n) { - var nums = []; - var ret = n; - - var squire = x => Math.pow(parseInt(x), 2); - var add = (prev, cur) => prev + cur; - while(ret !== 1) { - if(nums.indexOf(ret) > -1) { - return false; - } else { - nums.push(ret); - } - digits = ret.toString().split('').map(squire); - ret = digits.reduce(add); - } - return true; -} -``` - - -### 203. [Remove Linked List Elements](https://leetcode.com/problems/remove-linked-list-elements/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @param {number} val - * @return {ListNode} - */ -var removeElements = function(head, val) { - while(head && head.val == val) { - head = head.next; - } - - if(!head) { - return head; - } - - var prev = head; - var iter = head.next; - - while(iter) { - if(iter.val == val) { - prev.next = iter.next; - } else { - prev = iter; - } - iter = iter.next; - } - - return head; -}; -``` - - -### 204. [Count Primes](https://leetcode.com/problems/count-primes/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var countPrimes = function(n) { - var isPrime = []; - for (var i = 2; i < n; i++) { - isPrime[i] = true; - } - - for (var i = 2; i * i < n; i++) { - if (isPrime[i]) { - for (var j = i * i; j < n; j += i) { - isPrime[j] = false; - } - } - } - - var count = 0; - for (var i = 2; i < n; i++) { - if (isPrime[i]) { - count++; - } - } - - return count; -}; - -``` - - -### 205. [Isomorphic Strings](https://leetcode.com/problems/isomorphic-strings/description/) -```javascript -/** - * @param {string} s - * @param {string} t - * @return {boolean} - */ -var isIsomorphic = function(s, t) { - if (s.length !== t.length) return false; - - var smap = {}; - var tmap = {}; - - for (var i = 0; i < s.length; i++) { - if (smap[s[i]] === undefined && tmap[t[i]] === undefined) { - smap[s[i]] = t[i]; - tmap[t[i]] = s[i]; - } - - if (smap[s[i]] !== t[i] || tmap[t[i]] !== s[i] ){ - return false; - } - } - - return true; -}; -``` - - -### 206. [Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var reverseList = function(head) { - if (head === null || head.next === null) return head; - - var prev = head; - var p = head.next; - var tmp; - - head.next = null; - while (p !== null) { - tmp = p.next; - p.next = prev; - prev = p; - p = tmp; - } - - return prev; -}; -``` - - -### 208. [Implement Trie (Prefix Tree)](https://leetcode.com/problems/implement-trie-prefix-tree/description/) -```python -class Node(object): - def __init__(self, val): - self.isEnd = False - self.val = val - self.dict = {} - -class Trie(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - self.root = Node('root') - - def insert(self, word): - """ - Inserts a word into the trie. - :type word: str - :rtype: void - """ - - cur = self.root - for i in word: - if cur.dict.get(i) == None: - cur.dict[i] = Node(i) - cur = cur.dict[i] - - cur.isEnd = True - - def search(self, word): - """ - Returns if the word is in the trie. - :type word: str - :rtype: bool - """ - cur = self.root; - for i in word: - if cur.dict.get(i): - cur = cur.dict[i] - else: - return False - - return cur.isEnd - - def startsWith(self, prefix): - """ - Returns if there is any word in the trie that starts with the given prefix. - :type prefix: str - :rtype: bool - """ - cur = self.root - for i in prefix: - if cur.dict.get(i): - cur = cur.dict[i] - else: - return False - return True - - -# Your Trie object will be instantiated and called as such: -# obj = Trie() -# obj.insert(word) -# param_2 = obj.search(word) -# param_3 = obj.startsWith(prefix) -``` - - -### 217. [Contains Duplicate](https://leetcode.com/problems/contains-duplicate/description/) -```javascript -/** - * @param {number[]} nums - * @return {boolean} - */ -var containsDuplicate = function(nums) { - for(var i = 0; i < nums.length; i++) { - for(var j = i + 1 ; j < nums.length; j++) { - if(nums[i] == nums[j]) { - return true; - } - } - } - return false; -}; -``` - - -### 219. [Contains Duplicate II](https://leetcode.com/problems/contains-duplicate-ii/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} k - * @return {boolean} - */ - /* -var containsNearbyDuplicate = function(nums, k) { - for(var i = 0; i < nums.length; i++) { - for(var j = i + 1; j < nums.length && j - i <= k; j++) { - if(nums[i] === nums[j]) { - return true; - } - } - } - return false; -}; -*/ - -var containsNearbyDuplicate = function(nums, k) { - var index = {}; - var value; - for(var i = 0; i < nums.length; i++) { - value = nums[i]; - if(index[value] === undefined) { - index[value] = [i]; - } else if(i - index[value][index[value].length - 1] <= k){ - return true; - } else { - index[value].push(i); - } - } - return false; -} -``` - - -### 223. [Rectangle Area](https://leetcode.com/problems/rectangle-area/description/) -```javascript -/** - * @param {number} A - * @param {number} B - * @param {number} C - * @param {number} D - * @param {number} E - * @param {number} F - * @param {number} G - * @param {number} H - * @return {number} - */ -var computeArea = function(A, B, C, D, E, F, G, H) { - var areaA = (C-A) * (D-B); - var areaB = (G-E) * (H-F); - - var left = Math.max(A, E); - var right = Math.min(G, C); - var bottom = Math.max(F, B); - var top = Math.min(D, H); - - var overlap = 0; - - if(right > left && top > bottom) { - overlap = (right - left) * (top - bottom); - } - return areaA + areaB - overlap; -}; -``` - - -### 225. [Implement Stack using Queues](https://leetcode.com/problems/implement-stack-using-queues/description/) -```python -class MyStack(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - self.queue = [] - - def push(self, x): - """ - Push element x onto stack. - :type x: int - :rtype: void - """ - self.queue.append(x) - for i in range(len(self.queue) - 1): - self.queue.append(self.queue.pop(0)) - - - def pop(self): - """ - Removes the element on top of the stack and returns that element. - :rtype: int - """ - return self.queue.pop(0) - - def top(self): - """ - Get the top element. - :rtype: int - """ - return self.queue[0] - - def empty(self): - """ - Returns whether the stack is empty. - :rtype: bool - """ - return len(self.queue) == 0 - - - -# Your MyStack object will be instantiated and called as such: -# obj = MyStack() -# obj.push(x) -# param_2 = obj.pop() -# param_3 = obj.top() -# param_4 = obj.empty() -``` - - -### 226. [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {TreeNode} - */ -var invertTree = function(root) { - if(root !== null) { - var tmp; - tmp = root.left; - root.left = root.right; - root.right = tmp; - - invertTree(root.left); - invertTree(root.right); - } - return root; -}; -``` - - -### 228. [Summary Ranges](https://leetcode.com/problems/summary-ranges/description/) -```javascript -/** - * @param {number[]} nums - * @return {string[]} - */ -var summaryRanges = function(nums) { - if(nums.length === 0) { - return nums; - } - - var ret = []; - var start = 0; - - for(var i = 1; i < nums.length; i++) { - if(nums[i] - nums[i-1] != 1) { - ret.push(nums.slice(start, i)); - start = i; - } - } - ret.push(nums.slice(start)); - - ret = ret.map(function(item) { - if(item.length > 1) { - return item[0] + '->' + item[item.length - 1]; - } else { - return item[0] + ''; - } - }); - - return ret; -}; -``` - - -### 231. [Power of Two](https://leetcode.com/problems/power-of-two/description/) -```javascript -/** - * @param {number} n - * @return {boolean} - */ -var isPowerOfTwo = function(n) { - if(n === 0) return false; - while(n !== 1) { - if(n % 2 === 0) { - n = n / 2; - } else { - return false; - } - } - return true; -}; -``` - - -### 232. [Implement Queue using Stacks](https://leetcode.com/problems/implement-queue-using-stacks/description/) -```javascript -/** - * @constructor - */ -var Queue = function() { - this.stack1 = []; - this.stack2 =[]; -}; - -/** - * @param {number} x - * @returns {void} - */ -Queue.prototype.push = function(x) { - this.stack1.push(x); -}; - -/** - * @returns {void} - */ -Queue.prototype.pop = function() { - if(this.stack2.length > 0) { - return this.stack2.pop(); - } - if(this.stack1.length > 0) { - while(this.stack1.length > 0) { - this.stack2.push(this.stack1.pop()); - } - return this.stack2.pop(); - } - return null; -}; - -/** - * @returns {number} - */ -Queue.prototype.peek = function() { - if(this.stack2.length > 0) { - return this.stack2[this.stack2.length - 1]; - } - if(this.stack1.length > 0) { - return this.stack1[0]; - } - return null; -}; - -/** - * @returns {boolean} - */ -Queue.prototype.empty = function() { - return this.stack1.length === 0 && this.stack2.length === 0; -}; -``` - - -### 234. [Palindrome Linked List](https://leetcode.com/problems/palindrome-linked-list/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {boolean} - */ -var isPalindrome = function(head) { - function reverseList(head) { - if(!head) { - return head; - } - var prev = null; - var next = null; - while(head) { - next = head.next; - head.next = prev; - prev = head; - head = next; - } - return prev; - } - if(!head || !head.next ) { - return true; - } - var slow = head; - var fast = head; - while(fast && fast.next && fast.next.next) { - slow = slow.next; - fast = fast.next.next; - } - - slow.next = reverseList(slow.next); - slow = slow.next; - - while(slow) { - if(head.val !== slow.val) { - return false; - } - head = head.next; - slow = slow.next; - } - - return true; -}; -``` - - -### 235. [Lowest Common Ancestor of a Binary Search Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {TreeNode} p - * @param {TreeNode} q - * @return {TreeNode} - */ -var lowestCommonAncestor = function(root, p, q) { - var tmp; - if(p.val > q.val) { - tmp = p; - p = q; - q = tmp; - } - if(root.val >= p.val && root.val <= q.val) { - return root; - }else if(p.val < root.val & q.val < root.val) { - return lowestCommonAncestor(root.left, p, q); - } else if(p.val > root.val && q.val > root.val){ - return lowestCommonAncestor(root.right, p, q); - } -}; -``` - - -### 237. [Delete Node in a Linked List](https://leetcode.com/problems/delete-node-in-a-linked-list/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} node - * @return {void} Do not return anything, modify node in-place instead. - */ -var deleteNode = function(node) { - node.val = node.next.val; - node.next = node.next.next; -}; -``` - - -### 238. [Product of Array Except Self](https://leetcode.com/problems/product-of-array-except-self/description/) -```javascript -/** - * @param {number[]} nums - * @return {number[]} - */ -var productExceptSelf = function(nums) { - var zeroCount = 0; - var products = nums - .filter((num) => { - if(num === 0) zeroCount++; - return num !== 0; - }) - .reduce((prev, curr) => prev * curr, 1); - return nums.map((num) => { - if(zeroCount >= 2) { - return 0; - } - if(zeroCount === 1) { - return num === 0 ? products : 0; - } - return products / num; - - }); -}; -``` - - -### 242. [Valid Anagram](https://leetcode.com/problems/valid-anagram/description/) -```javascript -/** - * @param {string} s - * @param {string} t - * @return {boolean} - */ -var isAnagram = function(s, t) { - var arr1 = s.split('').sort(); - var arr2 = t.split('').sort(); - if(arr1.length !== arr2.length) { - return false; - } - for(var i = 0; i < arr1.length; i++) { - if(arr1[i] !== arr2[i]) { - return false; - } - } - return true; -}; -``` - - -### 243. [Shortest Word Distance](https://leetcode.com/problems/shortest-word-distance/description/) -```python -import sys -class Solution(object): - def shortestDistance(self, words, word1, word2): - """ - :type words: List[str] - :type word1: str - :type word2: str - :rtype: int - """ - index1 = index2 = None - minDist = sys.maxint - - for k, v in enumerate(words): - if v == word1: - index1 = k - if v == word2: - index2 = k - if index1 != None and index2 != None: - minDist = min(minDist, abs(index1 - index2)) - - return minDist -``` - - -### 244. [Shortest Word Distance II](https://leetcode.com/problems/shortest-word-distance-ii/description/) -```python -import sys -class WordDistance(object): - - def __init__(self, words): - """ - :type words: List[str] - """ - self.position = {} - for index, word in enumerate(words): - self.position[word] = self.position.get(word, []) + [index] - - def shortest(self, word1, word2): - """ - :type word1: str - :type word2: str - :rtype: int - """ - l1, l2 = self.position[word1], self.position[word2] - i = j = 0 - res = sys.maxint - - while i < len(l1) and j < len(l2): - res = min(res, abs(l1[i] - l2[j])) - if l1[i] < l2[j]: - i += 1 - else: - j += 1 - return res - - - -# Your WordDistance object will be instantiated and called as such: -# obj = WordDistance(words) -# param_1 = obj.shortest(word1,word2) -``` - - -### 257. [Binary Tree Paths](https://leetcode.com/problems/binary-tree-paths/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {string[]} - */ -var binaryTreePaths = function(root) { - if(root === null) { - return []; - } - var ret = []; - var str = arguments[1] ? arguments[1] : ''; - if(str) { - str = str + '->' + root.val; - } else { - str = root.val + ''; - } - if(root.left === null && root.right === null) { - ret.push(str); - } - - if(root.left) { - var leftRet = binaryTreePaths(root.left, str); - Array.prototype.push.apply(ret, leftRet); - } - if(root.right) { - var rightRet = binaryTreePaths(root.right, str); - Array.prototype.push.apply(ret, rightRet); - } - return ret; -}; -``` - - -### 258. [Add Digits](https://leetcode.com/problems/add-digits/description/) -```javascript -/** - * @param {number} num - * @return {number} - */ -var addDigits = function(num) { - return 1 + (num - 1) % 9; -}; -``` - - -### 263. [Ugly Number](https://leetcode.com/problems/ugly-number/description/) -```javascript -/** - * @param {number} num - * @return {boolean} - */ -var isUgly = function(num) { - if(num <= 0) { - return false; - } - while(num % 2 === 0) {num /= 2;} - while(num % 3 === 0) {num /= 3;} - while(num % 5 === 0) {num /= 5;} - return num === 1 ? true : false; -}; -``` - - -### 268. [Missing Number](https://leetcode.com/problems/missing-number/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var missingNumber = function(nums) { - return (0 + nums.length) * (nums.length + 1) / 2 - nums.reduce((p, c) => p + c, 0); -}; -``` - - -### 278. [First Bad Version](https://leetcode.com/problems/first-bad-version/description/) -```javascript -/** - * Definition for isBadVersion() - * - * @param {integer} version number - * @return {boolean} whether the version is bad - * isBadVersion = function(version) { - * ... - * }; - */ - -/** - * @param {function} isBadVersion() - * @return {function} - */ -var solution = function(isBadVersion) { - /** - * @param {integer} n Total versions - * @return {integer} The first bad version - */ - return function(n) { - var start = 1; - var end = n; - var middle; - while (start <= end) { - middle = start + Math.floor((end - start) / 2); - if (middle + 1 <= n && !isBadVersion(middle) && isBadVersion(middle + 1)) { - return middle + 1; - } - if (middle - 1 > 0 && !isBadVersion(middle - 1) && isBadVersion(middle)) { - return middle - } - if (middle === 1 && isBadVersion(middle)) { - return middle; - } - if (isBadVersion(middle)) { - end = middle - 1; - } else { - start = middle + 1; - } - } - return 'null'; - }; -}; -``` - - -### 281. [Zigzag Iterator](https://leetcode.com/problems/zigzag-iterator/description/) -```python -class ZigzagIterator(object): - - def __init__(self, v1, v2): - self.data = [(len(v), iter(v)) for v in (v1, v2) if v] - - def next(self): - len, iter = self.data.pop(0) - if len > 1: - self.data.append((len-1, iter)) - return next(iter) - - def hasNext(self): - return bool(self.data) -``` - - -### 283. [Move Zeroes](https://leetcode.com/problems/move-zeroes/description/) -```javascript -/** - * @param {number[]} nums - * @return {void} Do not return anything, modify nums in-place instead. - */ -var moveZeroes = function(nums) { - var sum = 0; - for(var i = nums.length - 1; i >=0; i--) { - if(nums[i] === 0) { - nums.splice(i,1); - sum++; - } - } - [].push.apply(nums, new Array(sum).fill(0)) -}; -``` - - -### 290. [Word Pattern](https://leetcode.com/problems/word-pattern/description/) -```javascript -/** - * @param {string} pattern - * @param {string} str - * @return {boolean} - */ -var wordPattern = function(pattern, str) { - var s = pattern; - var t = str.split(' '); - if (s.length !== t.length) return false; - - var smap = {}; - var tmap = {}; - - for (var i = 0; i < s.length; i++) { - if (smap[s[i]] === undefined && tmap[t[i]] === undefined) { - smap[s[i]] = t[i]; - tmap[t[i]] = s[i]; - } - - if (smap[s[i]] !== t[i] || tmap[t[i]] !== s[i] ){ - return false; - } - } - - return true; -}; -``` - - -### 292. [Nim Game](https://leetcode.com/problems/nim-game/description/) -```javascript -/** - * @param {number} n - * @return {boolean} - */ -var canWinNim = function(n) { - return !(n !== 0 && n%4 === 0); -}; -``` - - -### 295. [Find Median from Data Stream](https://leetcode.com/problems/find-median-from-data-stream/description/) -```python -import Queue - -class MedianFinder(object): - - def __init__(self): - """ - initialize your data structure here. - """ - self.small = Queue.PriorityQueue() - self.large = Queue.PriorityQueue() - - - def addNum(self, num): - """ - :type num: int - :rtype: void - """ - self.small.put(num) - self.large.put(-self.small.get()) - - if self.small.qsize() < self.large.qsize(): - self.small.put(-self.large.get()) - - - def findMedian(self): - """ - :rtype: float - """ - if self.small.qsize() > self.large.qsize(): - return float(self.small.queue[0]) - else: - return (float(self.small.queue[0] - self.large.queue[0])) / 2 - - - - -# Your MedianFinder object will be instantiated and called as such: -# obj = MedianFinder() -# obj.addNum(num) -# param_2 = obj.findMedian() -``` - - -### 297. [Serialize and Deserialize Binary Tree](https://leetcode.com/problems/serialize-and-deserialize-binary-tree/description/) -```python -class Codec: - - def serialize(self, root): - """Encodes a tree to a single string. - - :type root: TreeNode - :rtype: str - """ - if root == None: - return [] - left = self.serialize(root.left) - right = self.serialize(root.right) - - if len(right) == 0 and len(left) == 0: - return [root.val] - elif len(right) == 0: - return [root.val, left]; - else: - return [root.val, left, right]; - - # 1[2,3[4,5]] - def deserialize(self, data): - """Decodes your encoded data to tree. - - :type data: str - :rtype: TreeNode - """ - if data == []: - return - - if data == None: - return - elif isinstance(data, int): - return TreeNode(data) - elif isinstance(data, list): - root = TreeNode(data[0]) - if (len(data) > 1): - root.left = self.deserialize(data[1]) - if (len(data) > 2): - root.right = self.deserialize(data[2]) - return root - -``` - - -### 298. [Binary Tree Longest Consecutive Sequence](https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/description/) -```python -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestConsecutive(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - - self.maxLen = 1 - self.find(root, root.val, 1) - return self.maxLen - - def find(self, node, value, len): - if node.left: - if node.left.val == value + 1: - self.maxLen = max(self.maxLen, len + 1) - self.find(node.left, node.left.val, len + 1) - else: - self.find(node.left, node.left.val, 1) - - if node.right: - if node.right.val == value + 1: - self.maxLen = max(self.maxLen, len + 1) - self.find(node.right, node.right.val, len + 1) - else: - self.find(node.right, node.right.val, 1) -``` - - -### 303. [Range Sum Query - Immutable](https://leetcode.com/problems/range-sum-query-immutable/description/) -```javascript -/** - * @param {number[]} nums - */ -var NumArray = function(nums) { - this.dp = []; - this.dp[0] = nums[0]; - for (var i = 1; i < nums.length; i++) { - this.dp[i] = this.dp[i - 1] + nums[i]; - } -}; - -/** - * @param {number} i - * @param {number} j - * @return {number} - */ -NumArray.prototype.sumRange = function(i, j) { - return this.dp[j] - (i === 0 ? 0 : this.dp[i - 1]); -}; - -/** - * Your NumArray object will be instantiated and called as such: - * var obj = Object.create(NumArray).createNew(nums) - * var param_1 = obj.sumRange(i,j) - */ -``` - - -### 307. [Range Sum Query - Mutable](https://leetcode.com/problems/range-sum-query-mutable/description/) -```javascript -/** - * @param {number[]} nums - */ -var NumArray = function(nums) { - this.nums = [0].concat(nums); - this.BIT = [0]; - for (var i = 1; i < this.nums.length; i++) { - this.BIT[i] = 0; - for (var j = i - this.lowestbit(i) + 1; j <= i; j++) { - this.BIT[i] += this.nums[j]; - } - } -}; - -// lowestbit 指将i转为二进制后,最后一个1的位置所代表的数值 -NumArray.prototype.lowestbit = function(v) { - return (v & -v); -}; -/** -* @param {number} i -* @param {number} val -* @return {void} -*/ - -// (1)假如i是左子节点,那么其父节点下标为i+(lowestbit(i)) -// (2)假如i是右子节点,那么其父节点下标为i-(lowestbit(i)) -// 更新BIT[i], 以及包含了num[i]的BIT, 也就是i的右父节点 -NumArray.prototype.update = function(i, val) { - var k = i + 1; - var delta = val - this.nums[k]; - this.nums[k] = val; - while (k < this.nums.length) { - this.BIT[k] += delta; - k = k + this.lowestbit(k); - } -}; - -// 求当前结点,以及它的所有右侧父节点 -NumArray.prototype.sumLeft = function(i) { - var sum = 0; - while (i > 0) { - sum += this.BIT[i]; - i = i - this.lowestbit(i); - } - return sum; -}; -/** -* @param {number} i -* @param {number} j -* @return {number} -*/ -NumArray.prototype.sumRange = function(i, j) { - return this.sumLeft(j + 1) - this.sumLeft(i); -}; - -/** -* Your NumArray object will be instantiated and called as such: -* var obj = Object.create(NumArray).createNew(nums) -* obj.update(i,val) -* var param_2 = obj.sumRange(i,j) -*/ -``` - - -### 312. [Burst Balloons](https://leetcode.com/problems/burst-balloons/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -function brust(memo, nums, left, right) { - if (memo[left][right] !== undefined) { - return memo[left][right]; - } - - var max = 0; - for (var i = left + 1; i < right; i++) { - max = Math.max(max, - nums[left] * nums[i] * nums[right] - + brust(memo, nums, left, i) - + brust(memo, nums, i, right)); - } - memo[left][right] = max; - - return max; -} - -var maxCoins = function(nums) { - // delete 0, and 1 in front and end - nums = [1].concat(nums.filter(item => { - return item !== 0; - })).concat(1); - - // init the memo - var memo = []; - for (var i = 0; i < nums.length; i++) { - memo.push(new Array(nums.length)); - } - - return brust(memo, nums, 0, nums.length - 1); -}; - -``` - - -### 319. [Bulb Switcher](https://leetcode.com/problems/bulb-switcher/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var bulbSwitch = function(n) { - return parseInt(Math.sqrt(n)); -}; -``` - - -### 326. [Power of Three](https://leetcode.com/problems/power-of-three/description/) -```javascript -/** - * @param {number} n - * @return {boolean} - */ -var isPowerOfThree = function(n) { - while(true) { - if(n === 1) { - return true; - } - if(n === 0 || n === 2) { - return false; - } - if(n % 3 !== 0) { - return false; - } else { - n = n / 3; - } - } - return true; -}; -``` - - -### 328. [Odd Even Linked List](https://leetcode.com/problems/odd-even-linked-list/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var oddEvenList = function(head) { - if(head === null) { - return null; - } - var second = head.next; - - var odd = head; - var even = head.next; - while(odd && odd.next && odd.next.next) { - odd.next = even.next; - odd = odd.next; - if(odd) { - even.next = odd.next; - even = even.next; - } - } - odd.next = second; - return head; -}; -``` - - -### 338. [Counting Bits](https://leetcode.com/problems/counting-bits/description/) -```javascript -var countBits = function(num) { - var dp = [0]; - for (var i = 1; i <= num; i++) { - dp[i] = i % 2 === 0 ? dp[i / 2] : dp[(i - 1) / 2] + 1; - } - - return dp -}; -``` - - -### 340. [Longest Substring with At Most K Distinct Characters](https://leetcode.com/problems/longest-substring-with-at-most-k-distinct-characters/description/) -```javascript -/** - * @param {string} s - * @param {number} k - * @return {number} - */ -var lengthOfLongestSubstringKDistinct = function(s, k) { - var map = {}; - var j = 0; - var maxLen = 0; - var charCount = 0; - var low, high; - - for (var i = 0; i < s.length; i++) { - var char = s[i]; - - if (map[char] === undefined || map[char] === 0) { - map[char] = 1; - charCount++; - } else { - map[char]++; - } - - if (charCount <= k && i - j + 1> maxLen) { - low = j; - high = i; - maxLen = i - j + 1; - } - if (charCount > k) { - while (charCount > k) { - var tail = s[j]; - map[tail]--; - if (map[tail] === 0) { - charCount--; - } - j++; - } - } - } - - // the longest string: s.slice(low, high + 1) - return maxLen; -}; - -``` - - -### 342. [Power of Four](https://leetcode.com/problems/power-of-four/description/) -```javascript -/** - * @param {number} num - * @return {boolean} - - -var isPowerOfFour = function(num) { - return num > 0 && (num & (num - 1)) === 0 && (num & 0x55555555) !== 0; -}; - */ - -var isPowerOfFour = function(num) { - if (num < 1) { - return false; - } else if (num === 1) { - return true; - } else if (num % 4 !== 0) { - return false; - } else { - return isPowerOfFour(num / 4); - } -}; -``` - - -### 343. [Integer Break](https://leetcode.com/problems/integer-break/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var integerBreak = function(n) { - var maxArr = { - 1: 1, - 2: 1, - }; - var maxValue = null; - var value = null; - - for(var i = 3; i <= n; i++) { - maxValue = Number.MIN_SAFE_INTEGER; - for(var j = 1; j <= i / 2; j++) { - value = Math.max(j, maxArr[j]) * Math.max(i - j, maxArr[i - j]); - if(value > maxValue) { - maxValue = value; - } - } - maxArr[i] = maxValue; - } - - return maxArr[n]; -}; -``` - - -### 344. [Reverse String](https://leetcode.com/problems/reverse-string/description/) -```javascript -/** - * @param {string} s - * @return {string} - */ -var reverseString = function(s) { - return s.split('').reverse().join(''); -}; -``` - - -### 345. [Reverse Vowels of a String](https://leetcode.com/problems/reverse-vowels-of-a-string/description/) -```javascript -/** - * @param {string} s - * @return {string} - */ -var reverseVowels = function(s) { - s = s.split(''); - var vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']; - var start = -1; - var end = s.length; - var temp; - - while (start < end) { - while (start < end && vowels.indexOf(s[++start]) === -1); - while (start < end && vowels.indexOf(s[--end]) === -1); - temp = s[start]; - s[start] = s[end]; - s[end] = temp; - } - - return s.join(''); -}; -``` - - -### 346. [Moving Average from Data Stream](https://leetcode.com/problems/moving-average-from-data-stream/description/) -```python -class MovingAverage(object): - - def __init__(self, size): - """ - Initialize your data structure here. - :type size: int - """ - self.size = size - self.queue = [] - self.count = 0 - self.sum = 0.0 - - - def next(self, val): - """ - :type val: int - :rtype: float - """ - self.count += 1 - self.queue.append(val) - self.sum += val - - if self.count > self.size: - self.sum -= self.queue[0] - self.queue.pop(0) - - return self.sum / min(self.size, self.count) - - - -# Your MovingAverage object will be instantiated and called as such: -# obj = MovingAverage(size) -# param_1 = obj.next(val) -``` - - -### 347. [Top K Frequent Elements](https://leetcode.com/problems/top-k-frequent-elements/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} k - * @return {number[]} - */ - -function SortNumber(size) { - this.size = size; - this.container = []; -} -SortNumber.prototype.setCompare = function(compare) { - this.compare = compare; -} -SortNumber.prototype.getMax = function() { - return this.max; -} -SortNumber.prototype.getMin = function() { - return this.min; -} -SortNumber.prototype.getAll = function() { - return this.container; -} -SortNumber.prototype.setBigNumber = function(num) { - if (this.container.length < this.size) { - this.container.push(num); - } else if (this.compare(this.min, num) < 0) { - this.container.shift(); - this.container.push(num); - } else { - return; - } - - this.container.sort(this.compare); - this.max = this.container[this.container.length - 1]; - this.min = this.container[0]; -} - -var topKFrequent = function(nums, k) { - var topNumber = new SortNumber(k); - topNumber.setCompare((a, b) => a.count - b.count); - var showTimes = {}; - nums.map((num) => { - if(showTimes[num]) { - showTimes[num]++; - } else { - showTimes[num] = 1; - } - }); - for(var num in showTimes) { - topNumber.setBigNumber({ - value: num, - count: showTimes[num], - }); - } - - return topNumber.getAll().map((item) => parseInt(item.value)); -}; -``` - - -### 348. [Design Tic-Tac-Toe](https://leetcode.com/problems/design-tic-tac-toe/description/) -```python -class TicTacToe(object): - - def __init__(self, n): - """ - Initialize your data structure here. - :type n: int - """ - self.row = [0] * n - self.col = [0] * n - self.diagonal = 0 - self.antiDiagonal = 0 - self.size = n - - - def move(self, row, col, player): - """ - Player {player} makes a move at ({row}, {col}). - @param row The row of the board. - @param col The column of the board. - @param player The player, can be either 1 or 2. - @return The current winning condition, can be either: - 0: No one wins. - 1: Player 1 wins. - 2: Player 2 wins. - :type row: int - :type col: int - :type player: int - :rtype: int - """ - weight = 1 if player == 1 else -1 - self.col[col] += weight - self.row[row] += weight - if col == row: - self.diagonal += weight - if col + row == self.size - 1: - self.antiDiagonal += weight - - if self.size in [self.col[col], self.row[row], self.diagonal, self.antiDiagonal]: - return 1 - elif -self.size in [self.col[col], self.row[row], self.diagonal, self.antiDiagonal]: - return 2 - else: - return 0 - - -# Your TicTacToe object will be instantiated and called as such: -# obj = TicTacToe(n) -# param_1 = obj.move(row,col,player) -``` - - -### 349. [Intersection of Two Arrays](https://leetcode.com/problems/intersection-of-two-arrays/description/) -```javascript -/** - * @param {number[]} nums1 - * @param {number[]} nums2 - * @return {number[]} - */ - -var intersection = function (nums1, nums2) { - var ret = []; - for (var i = 0; i < nums1.length; i++) { - for (var j = 0; j < nums2.length; j++) { - if (nums1[i] == nums2[j] && ret.indexOf(nums1[i]) === -1) { - ret.push(nums1[i]); - break; - } - } - } - return ret; -} -``` - - -### 350. [Intersection of Two Arrays II](https://leetcode.com/problems/intersection-of-two-arrays-ii/description/) -```javascript -/** - * @param {number[]} nums1 - * @param {number[]} nums2 - * @return {number[]} - */ -var intersect = function(nums1, nums2) { - var map = {}; - var ret = []; - - nums1.forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - - nums2.forEach(i => { - if(map[i] !== undefined && map[i] > 0) { - ret.push(i); - map[i]--; - } - }); - - return ret; -}; -``` - - -### 357. [Count Numbers with Unique Digits](https://leetcode.com/problems/count-numbers-with-unique-digits/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var countNumbersWithUniqueDigits = function(n) { - var dp = []; - var ret = 0; - - dp[0] = 1; - dp[1] = 9; - for (var i = 2; i <= 10; i++) { - dp[i] = dp[i - 1] * (11 - i); - } - for (var i = 0; i <= Math.min(10, n); i++) { - ret += dp[i]; - } - - return ret; -}; - -``` - - -### 361. [Bomb Enemy](https://leetcode.com/problems/bomb-enemy/description/) -```python -class Solution(object): - def maxKilledEnemies(self, grid): - """ - :type grid: List[List[str]] - :rtype: int - """ - if grid == None or len(grid) == 0 or len(grid[0]) == 0: - return 0 - ret = 0 - colCount = {} - rowCount = 0 - for i in range(len(grid)): - for j in range(len(grid[0])): - if j == 0 or grid[i][j - 1] == 'W': - rowCount = self.getRowCount(grid, i, j) - if i == 0 or grid[i - 1][j] == 'W': - colCount[j] = self.getColCount(grid, i, j) - if grid[i][j] == '0': - ret = max(rowCount + colCount[j], ret) - - return ret - def getRowCount(self, grid, i, j): - count = 0 - while j < len(grid[0]) and grid[i][j] != 'W': - if grid[i][j] == 'E': - count += 1 - j += 1 - return count - def getColCount(self, grid, i, j): - count = 0 - while i < len(grid) and grid[i][j] != 'W': - if grid[i][j] == 'E': - count += 1 - i += 1 - return count - -``` - - -### 362. [Design Hit Counter](https://leetcode.com/problems/design-hit-counter/description/) -```python -class HitCounter(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - self.time = [None] * 300 - self.hits = [0] * 300 - - def hit(self, timestamp): - """ - Record a hit. - @param timestamp - The current timestamp (in seconds granularity). - :type timestamp: int - :rtype: void - """ - index = timestamp % 300 - if self.time[index] != timestamp: - self.time[index] = timestamp - self.hits[index] = 1 - else: - self.hits[index] += 1 - - - def getHits(self, timestamp): - """ - Return the number of hits in the past 5 minutes. - @param timestamp - The current timestamp (in seconds granularity). - :type timestamp: int - :rtype: int - """ - total = 0 - for i in range(300): - if self.time[i] != None and timestamp - self.time[i] < 300: - total += self.hits[i] - - return total -``` - - -### 367. [Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/description/) -```javascript -/** - * @param {number} num - * @return {boolean} - */ -var isPerfectSquare = function(num) { - if (num < 1) return false; - if (num === 1) return true; - - var start = 0; - var end = num; - var middle = num / 2; - - while (start <= end) { - if (parseInt(num / middle) === middle && num % middle === 0) { - return true; - } else if (num / middle > middle) { - start = middle + 1; - } else if (num / middle < middle) { - end = middle - 1; - } - middle = parseInt((start + end) / 2); - } - - return false; -}; -``` - - -### 371. [Sum of Two Integers](https://leetcode.com/problems/sum-of-two-integers/description/) -```javascript -/** - * @param {number} a - * @param {number} b - * @return {number} - */ -/* -var getSum = function(a, b) { - if (b === 0) { - return a; - } else { - return getSum(a ^ b, (a & b) << 1 ); - } -}; -*/ - -var getSum = function(a, b) { - var tmp; - - while (b !== 0) { - tmp = a ^ b; - b = (a & b) << 1; - a = tmp; - } - - return a; -}; -``` - - -### 374. [Guess Number Higher or Lower](https://leetcode.com/problems/guess-number-higher-or-lower/description/) -```java -/* The guess API is defined in the parent class GuessGame. - @param num, your guess - @return -1 if my number is lower, 1 if my number is higher, otherwise return 0 - int guess(int num); */ - -public class Solution extends GuessGame { - public int guessNumber(int n) { - int start = 1; - int end = n; - int middle; - - while (start <= end) { - middle = (end - start) / 2 + start; - if (guess(middle) == 0) { - return middle; - } else if (guess(middle) > 0) { - start = middle + 1; - } else { - end = middle - 1; - } - } - return 0; - } -} -``` - - -### 382. [Linked List Random Node](https://leetcode.com/problems/linked-list-random-node/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param head The linked list's head. - Note that the head is guaranteed to be not null, so it contains at least one node. - * @param {ListNode} head - */ -var Solution = function(head) { - this.head = head; -}; - -/** - * Returns a random node's value. - * @return {number} - */ -Solution.prototype.getRandom = function() { - var ret = this.head.val; - var p = this.head.next; - var i = 2; - while (p !== null) { - var random = Math.ceil(Math.random() * i); - if (random === 1) { - ret = p.val; - } - i++; - p = p.next; - } - - return ret; -}; - -/** - * Your Solution object will be instantiated and called as such: - * var obj = Object.create(Solution).createNew(head) - * var param_1 = obj.getRandom() - */ -``` - - -### 383. [Ransom Note](https://leetcode.com/problems/ransom-note/description/) -```javascript -/** - * @param {string} ransomNote - * @param {string} magazine - * @return {boolean} - */ -var canConstruct = function(ransomNote, magazine) { - var map = {}; - var flag = true; - - magazine.split('').forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - ransomNote.split('').forEach(i => { - if(map[i] === undefined || map[i] === 0) { - flag = false; - } else { - map[i]--; - } - }); - - return flag; -}; -``` - - -### 384. [Shuffle an Array](https://leetcode.com/problems/shuffle-an-array/description/) -```javascript -/** - * @param {number[]} nums - */ -var Solution = function(nums) { - this.nums = nums; -}; - -/** - * Resets the array to its original configuration and return it. - * @return {number[]} - */ -Solution.prototype.reset = function() { - return this.nums; -}; - -/** - * Returns a random shuffling of the array. - * @return {number[]} - */ - -/* Fisher–Yates shuffle --- To shuffle an array a of n elements (indices 0..n-1): -for i from n−1 downto 1 do - j ← random integer such that 0 ≤ j ≤ i - exchange a[j] and a[i] -*/ -Solution.prototype.shuffle = function() { - var nums = this.nums.slice(); - var tmp, rand; - for (var i = nums.length - 1; i >= 0; i--) { - rand = Math.floor(Math.random() * (i + 1)); - tmp = nums[i]; - nums[i] = nums[rand]; - nums[rand] = tmp; - } - - return nums; -}; - -/** - * Your Solution object will be instantiated and called as such: - * var obj = Object.create(Solution).createNew(nums) - * var param_1 = obj.reset() - * var param_2 = obj.shuffle() - */ -``` - - -### 387. [First Unique Character in a String](https://leetcode.com/problems/first-unique-character-in-a-string/description/) -```javascript -/** - * @param {string} s - * @return {number} - */ -var firstUniqChar = function(s) { - var map = {}; - - s.split('').forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - - for(var i = 0; i < s.length; i++) { - if(map[s[i]] === 1) { - return i; - } - } - - return -1; - -}; -``` - - -### 389. [Find the Difference](https://leetcode.com/problems/find-the-difference/description/) -```javascript -/** - * @param {string} s - * @param {string} t - * @return {character} - */ -var findTheDifference = function(s, t) { - if(!s) return t; - var sSum = s.split('').map(i => i.charCodeAt(0)).reduce((p, c) => p + c); - var tSum = t.split('').map(i => i.charCodeAt(0)).reduce((p, c) => p + c); - return String.fromCharCode(tSum - sSum); -}; -``` - - -### 392. [Is Subsequence](https://leetcode.com/problems/is-subsequence/description/) -```javascript -/** - * @param {string} s - * @param {string} t - * @return {boolean} - */ -var isSubsequence = function(s, t) { - var j = 0; - - for (var i = 0; i < t.length; i++) { - target = s[j]; - if(t[i] === target) { - j++; - } - if(j === s.length) { - break; - } - } - - if (j === s.length) { - return true; - } else { - return false; - } -}; -``` - - -### 394. [Decode String](https://leetcode.com/problems/decode-string/description/) -```python -class Solution(object): - def decodeString(self, s): - while '[' in s: - s = re.sub(r'(\d+)\[([a-z]*)\]', - lambda m: int(m.group(1)) * m.group(2), s) - return s - -``` - - -### 400. [Nth Digit](https://leetcode.com/problems/nth-digit/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var findNthDigit = function(n) { - var length = 1; - var count = 9; - var digits = 9; - - while (n > digits) { - length++; - count *= 10; - digits += length * count; - } - n = n - (digits - length * count); - - var position = Math.ceil(n / length); - var number = Math.pow(10, (length - 1)) + position - 1; - - if (n % length === 0) { - return number % 10; - } else { - return parseInt(String(number)[n % length - 1]); - } -}; - -``` - - -### 401. [Binary Watch](https://leetcode.com/problems/binary-watch/description/) -```javascript -/** - * @param {number} num - * @return {string[]} - */ - -var bitcount1 = function (num) { - return (num).toString(2).split('').filter(i => i === '1').length; -} -var formatTime = function(h, m) { - if (m < 10) { - return `${h}:0${m}` - } else { - return `${h}:${m}` - } -} - -var readBinaryWatch = function(num) { - var ret = []; - - for (var h = 0; h < 12; h++) { - for (var m = 0; m < 60; m++) { - if(bitcount1(h << 6 | m) === num) { - ret.push(formatTime(h, m)); - } - } - } - - return ret; -}; -``` - - -### 404. [Sum of Left Leaves](https://leetcode.com/problems/sum-of-left-leaves/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ -var sumOfLeftLeaves = function(root) { - if(root === null) return 0; - - if(root.left !== null && root.left.left === null && root.left.right === null) { - return root.left.val + sumOfLeftLeaves(root.right); - } else { - return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right); - } -}; -``` - - -### 406. [Queue Reconstruction by Height](https://leetcode.com/problems/queue-reconstruction-by-height/description/) -```javascript -/** - * @param {number[][]} people - * @return {number[][]} - */ -var reconstructQueue = function(people) { - if (people.length <= 1) return people; - people.sort((a, b) => { - if (a[0] !== b[0]) { - return b[0] - a[0]; - } else { - return a[1] - b[1]; - } - }); - - var ret = []; - ret.push(people[0]); - - for (var i = 1; i < people.length; i++) { - if (people[i][0] === people[0][0]) { - ret.push(people[i]); - continue; - } - - var count = 0, index = 0; - while (count < people[i][1]) { - if (ret[index][0] >= people[i][0]) count++; - index++; - } - ret.splice(index, 0, people[i]); - } - - return ret; -}; -``` - - -### 409. [Longest Palindrome](https://leetcode.com/problems/longest-palindrome/description/) -```javascript -/** - * @param {string} s - * @return {number} - */ -var longestPalindrome = function(s) { - var map = {}; - var number = 0; - var hasOdd = false; - - s.split('').forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - - for(var i in map) { - if(map[i] % 2 === 0) { - number += map[i]; - } else if(map[i] > 2) { - number += map[i] - 1; - hasOdd = true; - } else { - hasOdd = true; - } - } - - if(hasOdd) number++; - - return number; -}; -``` - - -### 412. [Fizz Buzz](https://leetcode.com/problems/fizz-buzz/description/) -```javascript -/** - * @param {number} n - * @return {string[]} - */ -var fizzBuzz = function(n) { - var ret = []; - - for (var i = 1; i <= n; i++) { - if (i % 15 === 0) { - ret.push('FizzBuzz'); - } else if (i % 3 === 0) { - ret.push('Fizz'); - } else if (i % 5 === 0) { - ret.push('Buzz'); - } else { - ret.push(i + ''); - } - } - - return ret; -}; -``` - - -### 413. [Arithmetic Slices](https://leetcode.com/problems/arithmetic-slices/description/) -```javascript -/** - * @param {number[]} A - * @return {number} - */ -var count = function(len) { - return len < 3 ? 0 : (1+ len - 2) * (len - 2) / 2; -}; - -var numberOfArithmeticSlices = function(A) { - if (A.length < 3) return 0; - var len = 2; - var diff = A[1] - A[0]; - var ret = 0; - - for (var i = 1; i < A.length - 1; i++) { - if (diff === A[i + 1] - A[i]) { - len++ - } else { - ret += count(len); - diff = A[i + 1] - A[i]; - len = 2; - } - } - ret += count(len); - - return ret; -}; -``` - - -### 414. [Third Maximum Number](https://leetcode.com/problems/third-maximum-number/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var getMax = function(nums) { - return Math.max.apply(null, nums); -}; - -var removeItem = function(nums, item) { - return nums.filter((value) => value !== item); -}; - -var thirdMax = function(nums) { - var first = getMax(nums); - nums = removeItem(nums, first); - var second = getMax(nums); - nums = removeItem(nums, second); - - if (nums.length === 0) return first; - return getMax(nums); - -}; - -``` - - -### 415. [Add Strings](https://leetcode.com/problems/add-strings/description/) -```javascript -/** - * @param {string} num1 - * @param {string} num2 - * @return {string} - */ -var addStrings = function(num1, num2) { - var zeroString = Array(Math.abs(num1.length - num2.length) + 1).join(0); - if (num1.length > num2.length) { - num2 = zeroString + num2; - } else { - num1 = zeroString + num1; - } - - var d1 = num1.split(''); - var d2 = num2.split(''); - var ret = []; - var sum ; - var hasCarryOver = false; - - for(var i = d1.length - 1; i >= 0 ; i--) { - sum = parseInt(d1[i]) + parseInt(d2[i]); - if (hasCarryOver) { - sum++; - } - if(sum >= 10) { - sum -= 10; - hasCarryOver = true; - } else { - hasCarryOver = false; - } - ret.unshift(sum); - } - - if(hasCarryOver) { - ret.unshift(1); - } - - return ret.join(''); -}; - -``` - - -### 419. [Battleships in a Board](https://leetcode.com/problems/battleships-in-a-board/description/) -```javascript -/** - * @param {character[][]} board - * @return {number} - */ -var countBattleships = function(board) { - var m = board.length; - if (m === 0) return 0; - var n = board[0].length; - - var count = 0; - - for (var i = 0; i < m; i++) { - for (var j = 0; j < n; j++) { - if (board[i][j] === '.') continue; - if (i > 0 && board[i - 1][j] == 'X') continue; - if (j > 0 && board[i][j - 1] == 'X') continue; - count++; - } - } - - return count; -}; -``` - - -### 421. [Maximum XOR of Two Numbers in an Array](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var findMaximumXOR = function(nums) { - var max = 0; - var mask = 0; - for (var i = 31; i >= 0; i--) { - var set = {}; - mask = mask | (1 << i); - nums.forEach((num) => set[num & mask] = true); - - var candidate = max | (1 << i); - - for (var prefix in set) { - if (set[prefix ^ candidate]) { - max = candidate; - } - } - } - - return max; -}; - -``` - - -### 432. [All O`one Data Structure](https://leetcode.com/problems/all-oone-data-structure/description/) -```python -from collections import defaultdict - -class Node(object): - def __init__(self, frequence): - self.prev = self.next = None - self.set = set([]) - self.frequence = frequence - def add(self, key): - self.set.add(key) - def remove(self, key): - self.set.remove(key) - def count(self): - return len(self.set) - def is_empty(self): - return self.count() == 0 - def get_key(self): - if self.is_empty(): - return None - else: - return list(self.set)[0] - -class DoubleLinkList(object): - def __init__(self, Node): - self.Node = Node - self.head = Node('head') - self.tail = Node('tail') - self.head.next = self.tail - self.tail.prev = self.head - - def insert_after(self, node, frequence): - newNode = self.Node(frequence) - nextNode = node.next - - node.next = newNode - newNode.next = nextNode - nextNode.prev = newNode - newNode.prev = node - - return newNode - - def insert_before(self, node, frequence): - return self.insert_after(node.prev, frequence) - - def remove(self, node): - prevNode = node.prev - prevNode.next = node.next - node.next.prev = prevNode - return - - def get_head(self): - return self.head - def get_tail(self): - return self.tail - -class AllOne(object): - - def __init__(self): - self.node_list = DoubleLinkList(Node) - self.key_counter_dict = defaultdict(int) - self.freq_node_dict = {0: self.node_list.get_head()} - - # firstly, remove key from node - # secondly, if the node is empty, remove the node from node_list and remove the key from freq_node_dict - def remove_key(self, key, frquence): - node = self.freq_node_dict[frquence] - node.remove(key) - if node.count() == 0: - self.node_list.remove(node) - self.freq_node_dict.pop(frquence) - - - # cf means current frequence - # pf means last state of frequence - def inc(self, key): - self.key_counter_dict[key] += 1 - cf = self.key_counter_dict[key] - pf = self.key_counter_dict[key] - 1 - - # add key to the new node - if not cf in self.freq_node_dict: - node = self.node_list.insert_after(self.freq_node_dict[pf], cf) - self.freq_node_dict[cf] = node - self.freq_node_dict[cf].add(key) - - # delete key from the old node - if pf > 0: - self.remove_key(key, pf) - - def dec(self, key): - if key in self.key_counter_dict: - self.key_counter_dict[key] -= 1 - cf = self.key_counter_dict[key] - pf = self.key_counter_dict[key] + 1 - - # add key to the new node - if not cf in self.freq_node_dict: - node = self.node_list.insert_before(self.freq_node_dict[pf], cf) - self.freq_node_dict[cf] = node - self.freq_node_dict[cf].add(key) - - # delete key from the old node - self.remove_key(key, pf) - - def getMinKey(self): - if self.node_list.get_head().next != self.node_list.get_tail(): - return self.node_list.get_head().next.get_key() - else: - return '' - - - def getMaxKey(self): - if self.node_list.get_tail().prev != self.node_list.get_head(): - return self.node_list.get_tail().prev.get_key() - else: - return '' - -``` - - -### 434. [Number of Segments in a String](https://leetcode.com/problems/number-of-segments-in-a-string/description/) -```javascript -/** - * @param {string} s - * @return {number} - */ -/* -var countSegments = function(s) { - return s.split(' ').filter((item) => item !== '').length; -}; -*/ - -var countSegments = function(s) { - var count = 0; - for (var i = 0; i < s.length; i++) { - if (s[i] !== ' ' && (i === 0 || s[i - 1] === ' ')) count++; - } - - return count; -}; -``` - - -### 437. [Path Sum III](https://leetcode.com/problems/path-sum-iii/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {number} sum - * @return {number} - */ -var traversal = function(root, list, sum, cb) { - if (root === null) return; - cb(list, root.val); - var newList = list.map((item) => item - root.val).concat(sum); - - traversal(root.left, newList, sum, cb); - traversal(root.right, newList, sum, cb); -}; -var pathSum = function(root, sum) { - var count = 0; - var cb = function (list, val) { - list.forEach((item) => { - if (item === val) { - count++; - } - }); - } - - traversal(root, [sum], sum, cb); - return count; -}; - -``` - - -### 441. [Arranging Coins](https://leetcode.com/problems/arranging-coins/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var arrangeCoins = function(n) { - if (n === 0) {return 0;} - var start = 0; - var end = n; - var middle = parseInt((start + end + 1) / 2); - - while (start <= end) { - if ((1 + middle) * middle / 2 <= n && n < (2 + middle) * (middle + 1) / 2) { - return middle; - } else if ((2 + middle) * (middle + 1) / 2 <= n) { - start = middle + 1; - } else if ((1 + middle) * middle / 2 > n) { - end = middle - 1; - } - middle = parseInt((start + end) / 2); - } -}; - -``` - - -### 442. [Find All Duplicates in an Array](https://leetcode.com/problems/find-all-duplicates-in-an-array/description/) -```javascript -/** - * @param {number[]} nums - * @return {number[]} - */ -var findDuplicates = function(nums) { - var ret = []; - for (var i = 0; i < nums.length; i++) { - var index = Math.abs(nums[i]) - 1; - if (nums[index] < 0) { - ret.push(Math.abs(nums[i])); - } - nums[index] = -Math.abs(nums[index]); - } - - return ret; -}; -``` - - -### 445. [Add Two Numbers II](https://leetcode.com/problems/add-two-numbers-ii/description/) -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} l1 - * @param {ListNode} l2 - * @return {ListNode} - */ - -var getLengthList = function(head) { - var len = 0; - while (head !== null) { - len++; - head = head.next; - } - return len; -}; - -var reverseList = function(head) { - if (head === null || head.next === null) return head; - - var prev = head; - var p = head.next; - var tmp; - - head.next = null; - while (p !== null) { - tmp = p.next; - p.next = prev; - prev = p; - p = tmp; - } - - return prev; -}; -var addTwoNumbers = function(l1, l2) { - var len1 = getLengthList(l1); - var len2 = getLengthList(l2); - - var tmp; - if (len1 >= len2) { - l1 = reverseList(l1); - l2 = reverseList(l2); - } else { - tmp = l2; - l2 = reverseList(l1); - l1 = reverseList(tmp); - } - - var head = l1; - var val1, val2; - var isOverTen = false; - var prev; - while (l1 !== null) { - val1 = l1.val; - val2 = l2 !== null ? l2.val : 0; - - if (isOverTen) { - val1++; - isOverTen = false; - } - if (val1 + val2 >= 10) { - l1.val = val1 + val2 - 10; - isOverTen = true; - } else { - l1.val = val1 + val2; - } - - prev = l1; - l1 = l1.next; - if (l2 !== null) { - l2 = l2.next; - } - } - - if (isOverTen) { - prev.next = new ListNode(1); - } - - return reverseList(head); -}; - -``` - - -### 448. [Find All Numbers Disappeared in an Array](https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/description/) -```javascript -/** - * @param {number[]} nums - * @return {number[]} - */ -var findDisappearedNumbers = function(nums) { - var map = {}; - var ret = []; - - nums.forEach(function(num) { - map[num] = true; - }); - - for (var i = 1; i <= nums.length; i++) { - if (map[i] === undefined) { - ret.push(i); - } - } - - return ret; -}; -``` - - -### 450. [Delete Node in a BST](https://leetcode.com/problems/delete-node-in-a-bst/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {number} key - * @return {TreeNode} - */ -var update = function(parent, direction) { - if (parent === null) { - return; - } - var deleteNode = parent[direction]; - if (deleteNode.right) { - parent[direction] = deleteNode.right; - - var leftIsNullNode = deleteNode.right; - while(leftIsNullNode.left !== null) leftIsNullNode = leftIsNullNode.left; - leftIsNullNode.left = deleteNode.left; - return parent; - } - if(deleteNode.left) { - parent[direction] = deleteNode.left; - return parent; - } - parent[direction] = null; - return parent; -}; - -var search = function(root, direction, key, ret) { - var node = root[direction]; - if (node === null) { - return; - } - - if (node.val === key) { - ret.parent = root; - ret.direction = direction; - } else if (node.val > key) { - search(node, 'left', key, ret); - } else { - search(node, 'right', key, ret); - } -}; - -var deleteNode = function(root, key) { - if (root === null) { - return null; - } - - if (root.val === key) { - if (root.right) { - var leftIsNullNode = root.right; - while(leftIsNullNode.left !== null) leftIsNullNode = leftIsNullNode.left; - - leftIsNullNode.left = root.left; - return root.right; - } - return root.left; - } - - var ret = { - parent: null, - direction: null, - }; - search(root, 'left', key, ret); - search(root, 'right', key, ret); - update(ret.parent, ret.direction); - - return root; -}; - -``` - - -### 451. [Sort Characters By Frequency](https://leetcode.com/problems/sort-characters-by-frequency/description/) -```javascript -/** -* @param {string} s -* @return {string} -*/ -var frequencySort = function(s) { - var charCountMap = {}; - - for (var i = 0; i < s.length; i++) { - if (charCountMap[s[i]] === undefined) { - charCountMap[s[i]] = 1; - } else { - charCountMap[s[i]]++; - } - } - - var list = []; - - for (var key in charCountMap) { - list.push({ - char: key, - count: charCountMap[key] - }); - } - - list.sort((a, b) => b.count- a.count); - - return list.reduce((p, c) => { - return p + c.char.repeat(c.count) - }, ''); -}; - -``` - - -### 453. [Minimum Moves to Equal Array Elements](https://leetcode.com/problems/minimum-moves-to-equal-array-elements/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var minMoves = function(nums) { - var min = Math.min.apply(null, nums) - - return nums.reduce((p, c) => p + c - min, 0); -}; -``` - - -### 454. [4Sum II](https://leetcode.com/problems/4sum-ii/description/) -```javascript -/** - * @param {number[]} A - * @param {number[]} B - * @param {number[]} C - * @param {number[]} D - * @return {number} - */ -var fourSumCount = function(A, B, C, D) { - var AB = []; - var CD = []; - for (var i = 0; i < A.length; i++) { - for (var j = 0; j < B.length; j++) { - AB.push(A[i] + B[j]); - CD.push(C[i] + D[j]); - } - } - - AB = AB.sort((a, b) => a - b); - CD = CD.sort((a, b) => a - b); - - var count = 0; - var m = 1, n = 1; - - i = 0; j = CD.length - 1; - while (i < AB.length && j >= 0) { - if (AB[i] + CD[j] > 0) { - j--; - continue; - } - if (AB[i] + CD[j] < 0) { - i++; - continue; - } - while (i < AB.length && AB[i] === AB[i + 1]) { - i++; m++; - } - - while (j >= 0 && CD[j] === CD[j - 1]) { - j--; n++; - } - - count += m * n; - i++; j--; - m = 1; n = 1; - } - - return count; -}; - -``` - - -### 455. [Assign Cookies](https://leetcode.com/problems/assign-cookies/description/) -```javascript -/** - * @param {number[]} g - * @param {number[]} s - * @return {number} - */ -var findContentChildren = function(g, s) { - var compare = (a, b) => a - b; - g = g.sort(compare); - s = s.sort(compare); - - var i = s.length - 1; // person index - var j = g.length - 1; // cookie index - var count = 0; - - while (i >= 0 && j >= 0) { - if(s[i] >= g[j]) { - i--; - j--; - count++ - } else { - j--; - } - } - - return count; -}; -``` - - -### 459. [Repeated Substring Pattern](https://leetcode.com/problems/repeated-substring-pattern/description/) -```javascript -/** - * @param {string} s - * @return {boolean} - */ -/* -var repeatedSubstringPattern = function(s) { - if (s.length === 1) return false; - var ret = false; - - for (var i = 1; i <= parseInt((s.length + 1) / 2); i++) { - for (var j = i; j < s.length; j++) { - if (s[j % i] !== s[j]) break; - } - if (j === s.length && (j - 1) % i === i - 1) { - ret = true; - break; - } - } - - return ret; -}; -*/ - -var repeatedSubstringPattern = function(s) { - return /^(.+)\1+$/.test(s); -} -``` - - -### 460. [LFU Cache](https://leetcode.com/problems/lfu-cache/description/) -```python -from collections import defaultdict -import collections - -class Node(object): - def __init__(self, frequence): - self.prev = self.next = None - self.dict = collections.OrderedDict() - self.frequence = frequence - def add(self, key): - self.dict[key] = True - def pop(self): - if not self.is_empty(): - return self.dict.popitem(last = False) - def remove(self, key): - del self.dict[key] - def count(self): - return len(self.dict) - def is_empty(self): - return self.count() == 0 - -class DoubleLinkList(object): - def __init__(self, Node): - self.Node = Node - self.head = Node('head') - self.tail = Node('tail') - self.head.next = self.tail - self.tail.prev = self.head - def insert_after(self, node, frequence): - newNode = self.Node(frequence) - nextNode = node.next - - node.next = newNode - newNode.next = nextNode - nextNode.prev = newNode - newNode.prev = node - return newNode - def insert_before(self, node, frequence): - return self.insert_after(node.prev, frequence) - def remove(self, node): - prevNode = node.prev - nextNode = node.next - prevNode.next = nextNode - nextNode.prev = prevNode - return - def get_head(self): - return self.head - def get_tail(self): - return self.tail - -class LFUCache(object): - - def __init__(self, capacity): - self.node_list = DoubleLinkList(Node) - self.key_value_dict = {} - self.key_freq_dict = defaultdict(int) - self.freq_node_dict = {0: self.node_list.get_head()} - self.capacity = self.remain = capacity - - # firstly, remove key from node or remove the laste key in lowest frequence node - # secondly, if the node is empty, remove the node from node_list and remove the key from freq_node_dict - def remove_key(self, node, key = None): - frequence = node.frequence - ret = None - if key == None: - ret = node.pop() - else: - node.remove(key) - if node.count() == 0: - self.node_list.remove(node) - self.freq_node_dict.pop(frequence) - - if ret: - delete_key = ret[0] - return delete_key - - # cf means current frequence - # pf means previous frequence - # remove from previous frequence node - # add into the current frequence node - def _update_node(self, key): - self.key_freq_dict[key] += 1 - cf = self.key_freq_dict[key] - pf = cf - 1 - - if not cf in self.freq_node_dict: - node = self.node_list.insert_after(self.freq_node_dict[pf], cf) - node.add(key) - self.freq_node_dict[cf] = node - self.freq_node_dict[cf].add(key) - - if pf > 0: - self.remove_key(self.freq_node_dict[pf], key) - - def get(self, key): - if not key in self.key_value_dict: - return -1 - - ret = self.key_value_dict[key] - self._update_node(key) - return ret - - def put(self, key, value): - if self.capacity == 0: - return - if not key in self.key_value_dict: - self.remain -= 1 - - if self.remain < 0: - deleted_key = self.remove_key(self.node_list.get_head().next) - self.remain += 1 - del self.key_freq_dict[deleted_key] - del self.key_value_dict[deleted_key] - - self.key_value_dict[key] = value - self._update_node(key) - -``` - - -### 461. [Hamming Distance](https://leetcode.com/problems/hamming-distance/description/) -```javascript -/** - * @param {number} x - * @param {number} y - * @return {number} - */ - -// Number of 1 Bits -var hammingWeight = function(n) { - var ret = 0; - for(var power = 32; power >= 0; power--) { - var exponent = Math.pow(2, power); - if (n >= exponent) { - ret++; - n -= exponent; - } - } - return ret; -}; - -var hammingDistance = function(x, y) { - return hammingWeight(x ^ y); -}; -``` - - -### 462. [Minimum Moves to Equal Array Elements II](https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var minMoves2 = function(nums) { - nums = nums.sort((a, b) => a - b); - var median = nums[Math.floor((nums.length - 1) / 2)]; - - return nums.reduce((p, c) => { - return p + Math.abs(c - median); - }, 0); -}; - -``` - - -### 463. [Island Perimeter](https://leetcode.com/problems/island-perimeter/description/) -```javascript -/** - * @param {number[][]} grid - * @return {number} - */ -var islandPerimeter = function(grid) { - var perimeter = 4 * grid.reduce((p, c) => p.concat(c)).reduce((p, c) => p + c); - - for(var i = 0; i < grid.length; i++) { - for(var j = 0; j < grid[i].length; j++) { - if(grid[i][j] === 1) { - if(i + 1 < grid.length && grid[i+1][j] === 1) { - perimeter -= 2 ; - } - if(j + 1 < grid[i].length && grid[i][j+1] === 1) { - perimeter -= 2; - } - } - } - } - - return perimeter; -}; -``` - - -### 476. [Number Complement](https://leetcode.com/problems/number-complement/description/) -```javascript -/** - * @param {number} num - * @return {number} - -这道题给了我们一个数,让我们求补数。通过分析题目汇总的例子,我们知道需要做的就是每个位翻转一下就行了,但是翻转的起始位置上从最高位的1开始的,前面的0是不能被翻转的,所以我们从高往低遍历,如果遇到第一个1了后,我们的flag就赋值为true,然后就可以进行翻转了,翻转的方法就是对应位异或一个1即可,参见代码如下: - - - -解法一: - -复制代码 -class Solution { -public: - int findComplement(int num) { - bool start = false; - for (int i = 31; i >= 0; --i) { - if (num & (1 << i)) start = true; - if (start) num ^= (1 << i); - } - return num; - } -}; -复制代码 - - -由于位操作里面的取反符号~本身就可以翻转位,但是如果直接对num取反的话就是每一位都翻转了,而最高位1之前的0是不能翻转的,所以我们只要用一个mask来标记最高位1前面的所有0的位置,然后对mask取反后,与上对num取反的结果即可,参见代码如下: - - - -解法二: - -复制代码 -class Solution { -public: - int findComplement(int num) { - int mask = INT_MAX; - while (mask & num) mask <<= 1; - return ~mask & ~num; - } -}; -复制代码 - - -再来看一种迭代的写法,一行搞定碉堡了,思路就是每次都右移一位,并根据最低位的值先进行翻转,如果当前值小于等于1了,就不用再调用递归函数了,参见代码如下: - - - -解法三: - -class Solution { -public: - int findComplement(int num) { - return (1 - num % 2) + 2 * (num <= 1 ? 0 : findComplement(num / 2)); - } -}; - - */ - -var findComplement = function(num) { - var mask = ~0; - while (mask & num) mask <<= 1; - return ~mask & ~num; -}; -``` - - -### 482. [License Key Formatting](https://leetcode.com/problems/license-key-formatting/description/) -```javascript -/** - * @param {string} S - * @param {number} K - * @return {string} - */ -var format = function(chars, length, separator) { - if (chars.length <= length) { - return chars.join(''); - } - return format(chars.slice(0, chars.length - length), length, separator) + separator + chars.slice(-length).join(''); -}; -var licenseKeyFormatting = function(S, K) { - var chars = S.split('').filter((char) => { - return char !== '-'; - }); - - return format(chars, K, '-').toUpperCase(); - -}; -``` - - -### 485. [Max Consecutive Ones](https://leetcode.com/problems/max-consecutive-ones/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var findMaxConsecutiveOnes = function(nums) { - var max = 0; - var length = 0; - nums.forEach(function(num) { - if (num === 1) length++; - if (num === 0) { - if (length > max) max = length; - length = 0; - } - }); - if (length > max) max = length; - return max; -}; -``` - - -### 486. [Predict the Winner](https://leetcode.com/problems/predict-the-winner/description/) -```javascript -/** - * @param {number[]} nums - * @return {boolean} - */ -var PredictTheWinner = function(nums) { - var n = nums.length; - var dp = new Array(n).fill(undefined).map(() => []); - - nums.forEach((num, i) => dp[i][i] = num); - - for (var len = 1; len < n; len++) { - for (var i = 0; i < n - len; i++) { - var j = i + len; - dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1]); - } - } - - return dp[0][n - 1] >= 0; - -}; - -``` - - -### 492. [Construct the Rectangle](https://leetcode.com/problems/construct-the-rectangle/description/) -```javascript -/** - * @param {number} area - * @return {number[]} - */ -var constructRectangle = function(area) { - var root = parseInt(Math.sqrt(area)); - var ret = []; - for (var i = root; i <= area; i++) { - if (area % i === 0) { - i > area / i ? ret.push(i, area / i) : ret.push(area / i, i); - break; - } - } - return ret; -}; -``` - - -### 494. [Target Sum](https://leetcode.com/problems/target-sum/description/) -```javascript - -var findTargetSumWays = function(nums, S) { - var count = 0; - var len = nums.length; - function find(index, sum) { - if (index === len) { - if (sum === S) count++; - } else { - find(index + 1, sum + nums[index]); - find(index + 1, sum - nums[index]); - } - } - find(0, 0); - - return count; -}; -``` - - -### 495. [Teemo Attacking](https://leetcode.com/problems/teemo-attacking/description/) -```javascript -/** - * @param {number[]} timeSeries - * @param {number} duration - * @return {number} - */ -var findPoisonedDuration = function(timeSeries, duration) { - if (timeSeries.length === 0) return 0; - - var time = 0; - for (var i = 0; i < timeSeries.length - 1; i++) { - if (timeSeries[i + 1] - timeSeries[i] < duration) { - time += timeSeries[i + 1] - timeSeries[i]; - } else { - time += duration; - } - } - time += duration; - - return time; -}; -``` - - -### 496. [Next Greater Element I](https://leetcode.com/problems/next-greater-element-i/description/) -```javascript -/** - * @param {number[]} findNums - * @param {number[]} nums - * @return {number[]} - */ -var nextGreaterElement = function(findNums, nums) { - var map = {}; - var stack = []; - nums.forEach(function(num) { - while(stack.length > 0 && stack[stack.length - 1] < num) { - map[stack.pop()] = num; - } - stack.push(num); - }); - - return findNums.map(function(num) { - return map[num] || -1; - }); -}; -``` - - -### 498. [Diagonal Traverse](https://leetcode.com/problems/diagonal-traverse/description/) -```javascript -/** - * @param {number[][]} matrix - * @return {number[]} - */ -function toggleDirection (direction) { - return direction === 'up' ? 'down' : 'up'; -} -var findDiagonalOrder = function(matrix) { - if (matrix.length === 0) return []; - var m = matrix.length; - var n = matrix[0].length; - var next = { - up: [-1, 1], - down: [1, -1] - }; - var direction = 'up'; - var x = 0, y = 0; - var ret = []; - - for (var i = 0; i < m * n; i++) { - ret.push(matrix[x][y]); - x += next[direction][0]; - y += next[direction][1]; - - if (x >= m) { - y += 2; - x -= 1; - direction = toggleDirection(direction); - } - if (y >= n) { - x += 2; - y -= 1; - direction = toggleDirection(direction); - } - if (x < 0) { - x = 0; - direction = toggleDirection(direction); - } - if (y < 0) { - y = 0; - direction = toggleDirection(direction); - } - } - - return ret; -}; - -``` - - -### 500. [Keyboard Row](https://leetcode.com/problems/keyboard-row/description/) -```javascript -/** - * @param {string[]} words - * @return {string[]} - */ -var findWords = function(words) { - return words.filter(function(str) { - return /^([qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*)$/.test(str.toLowerCase()); - }); -}; -``` - - -### 501. [Find Mode in Binary Search Tree](https://leetcode.com/problems/find-mode-in-binary-search-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ - -var traversal = function(root, func) { - if (root === null) { - return null; - } - traversal(root.left, func); - func(root.val); - traversal(root.right, func); -}; - -var findMode = function(root) { - if (root === null) return []; - - var ret; - var maxCount = Number.MIN_VALUE; - var prevValue; - var currentCount; - - traversal(root, function(val) { - if (prevValue === undefined) { - prevValue = val; - currentCount = 1; - } else { - if (prevValue === val) { - currentCount++; - } else { - currentCount = 1; - } - } - - if(currentCount > maxCount) { - ret = []; - ret.push(val); - maxCount = currentCount; - } else if (currentCount === maxCount) { - ret.push(val); - } - prevValue = val; - }); - - return ret; -}; -``` - - -### 503. [Next Greater Element II](https://leetcode.com/problems/next-greater-element-ii/description/) -```javascript -/** - * @param {number[]} nums - * @return {number[]} - */ -var nextGreaterElements = function(nums) { - var nextGreaterMap = {}; - var stack = []; - nums.concat(nums).forEach((item) => { - while (stack.length > 0 && stack[stack.length - 1] < item) { - var key = stack.pop(); - if (nextGreaterMap[key] === undefined) { - nextGreaterMap[key] = []; - } - nextGreaterMap[key].push(item); - } - stack.push(item); - }); - - return nums.map((item) => { - if (nextGreaterMap[item] && nextGreaterMap[item].length > 0) { - return nextGreaterMap[item].shift(); - } else { - return -1; - } - }); -}; - -``` - - -### 504. [Base 7](https://leetcode.com/problems/base-7/description/) -```javascript -/** - * @param {number} num - * @return {string} - */ -var convertToBase7 = function(num) { - if (num < 0) return '-' + convertToBase7(-num); - else if (num < 7) return String(num); - else return convertToBase7(parseInt(num / 7)) + num % 7; -}; -``` - - -### 506. [Relative Ranks](https://leetcode.com/problems/relative-ranks/description/) -```javascript -/** - * @param {number[]} nums - * @return {string[]} - */ -var findRelativeRanks = function(nums) { - var rank = 4; - var map = {}; - var sortNums = [].slice.call(nums).sort((a, b) => b - a); - for (var i = 0; i < sortNums.length; i++) { - if (i === 0) { - map[sortNums[i]] = 'Gold Medal'; - } else if (i === 1) { - map[sortNums[i]] = 'Silver Medal'; - } else if (i === 2) { - map[sortNums[i]] = 'Bronze Medal'; - } else { - map[sortNums[i]] = String(rank); - rank++; - } - } - - return nums.map((score) => { - return map[score]; - }); -}; -``` - - -### 508. [Most Frequent Subtree Sum](https://leetcode.com/problems/most-frequent-subtree-sum/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ -function getSum (root, map) { - if (root === null) return 0; - var left = getSum(root.left, map); - var right = getSum(root.right, map); - var sum = root.val + left + right; - - map[sum] === undefined ? map[sum] = 1 : map[sum]++; - return sum; -} -var findFrequentTreeSum = function(root) { - if (root === null) return []; - var valueCountMap = {}; - var max = -1; - var ret = []; - var key; - - getSum(root, valueCountMap); - for (key in valueCountMap) { - if (valueCountMap[key] > max) { - max = valueCountMap[key]; - } - } - - for (key in valueCountMap) { - if (valueCountMap[key] === max) { - ret.push(parseInt(key)); - } - } - - return ret; -}; -``` - - -### 513. [Find Bottom Left Tree Value](https://leetcode.com/problems/find-bottom-left-tree-value/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ - -var findBottomLeftValue = function(root) { - var maxDepth = Number.MIN_SAFE_INTEGER; - var value; - - var traverse = function(root, depth) { - if (root === null) return; - if (depth > maxDepth) { - value = root.val; - maxDepth = depth; - } - traverse(root.left, depth + 1); - traverse(root.right, depth + 1); - }; - - traverse(root, 1); - return value; -}; - -``` - - -### 515. [Find Largest Value in Each Tree Row](https://leetcode.com/problems/find-largest-value-in-each-tree-row/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ -var largestValues = function(root) { - if (root === null) return []; - var left = largestValues(root.left); - var right = largestValues(root.right); - - var ret = []; - for(var i = 0; i < left.length || i < right.length; i++) { - if (left[i] === undefined) { - ret.push(right[i]); - } else if (right[i] === undefined) { - ret.push(left[i]); - } else { - ret.push(Math.max(right[i], left[i])); - } - } - ret.unshift(root.val); - - return ret; -}; -``` - - -### 520. [Detect Capital](https://leetcode.com/problems/detect-capital/description/) -```javascript -/** - * @param {string} word - * @return {boolean} - */ -var detectCapitalUse = function(word) { - return /^[A-Z]?([a-z]*|[A-Z]*)$/.test(word); -}; -``` - - -### 522. [Longest Uncommon Subsequence II](https://leetcode.com/problems/longest-uncommon-subsequence-ii/description/) -```javascript -function isSubStr(str, sub) { - var i = 0; - var j = 0; - while (i < str.length && j < sub.length) { - if (sub[j] === str[i]) { - j++; i++; - } else { - i++; - } - } - return j === sub.length; -} - -var findLUSlength = function(strs) { - var maxLen = strs[0].length; - var notUniqStrs = []; - var map = {}; - - for (var i = 0; i < strs.length; i++) { - if (map[strs[i]] === true) { - notUniqStrs.push(strs[i]); - } else { - map[strs[i]] = true; - } - } - - notUniqStrs.forEach((str) => { - strs = strs.filter((sub) => { - return !isSubStr(str, sub); - }); - }); - - return strs.length === 0 ? -1 : Math.max.apply(null, strs.map(i => i.length)); -} - -``` - - -### 526. [Beautiful Arrangement](https://leetcode.com/problems/beautiful-arrangement/description/) -```javascript -/** - * @param {number} N - * @return {number} - */ -var countArrangement = function(N) { - var position = []; - for (var i = 1; i <= N; i++) position.push(i); - var value = position.slice(); - - var ret = 0; - var count = function(position, value) { - if (position.length === 1 && value.length === 1) { - if (position[0] % value[0] === 0 || value[0] % position[0] === 0) { - ret++; - } - return - } - for (var i = 0; i < position.length; i++) { - if (position[i] % value[0] === 0 || value[0] % position[i] === 0) { - count(position.slice(0, i).concat(position.slice(i + 1)), value.slice(1)); - } - } - }; - count(position, value); - return ret; -}; - -``` - - -### 529. [Minesweeper](https://leetcode.com/problems/minesweeper/description/) -```javascript -function getMineCount(board, point) { - var m = board.length; - var n = board[0].length; - var x = point[0]; - var y = point[1]; - var count = 0; - for (var i = -1; i < 2; i++) { - for (var j = -1; j < 2; j++) { - var p = x + i; - var q = y + j; - if (p < 0 || p >= m || q < 0 || q >= n) continue; - if (board[p][q] === 'M' || board[p][q] === 'X') count++; - } - } - return count; -} - -function updateSquare(board, point, visited) { - var [x, y] = point; - if (visited[x][y]) return; - visited[x][y] = true; - - var m = board.length; - var n = board[0].length; - var count = getMineCount(board, point); - - if (count === 0) { - board[x][y] = 'B'; - for (var i = -1; i < 2; i++) { - for (var j = -1; j < 2; j++) { - var p = x + i; - var q = y + j; - if (p < 0 || p >= m || q < 0 || q >= n || (p === x && q === y)) continue; - - updateSquare(board, [p, q], visited); - } - } - } else { - board[x][y] = count; - } -} - -var updateBoard = function(board, click) { - var m = board.length; - var n = board[0].length; - var visited = []; - for (var k = 0; k < m; k++) visited.push(new Array(n).fill(false)); - - var [x, y] = click; - if (board[x][y] === 'M') { - board[x][y] = 'X'; - } else { - updateSquare(board, click, visited); - } - - return board; -}; - -``` - - -### 530. [Minimum Absolute Difference in BST](https://leetcode.com/problems/minimum-absolute-difference-in-bst/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ - -var getMinimumDifference = function(root) { - var prev = null; - var min = Number.MAX_VALUE; - var traversal = function(root) { - if (root === null) return; - traversal(root.left); - if (prev !== null && root.val - prev < min) { - min = root.val - prev; - } - prev = root.val; - traversal(root.right); - }; - traversal(root); - - return min; -}; -``` - - -### 532. [K-diff Pairs in an Array](https://leetcode.com/problems/k-diff-pairs-in-an-array/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} k - * @return {number} - */ -var findPairs = function(nums, k) { - if (k < 0 || nums.length === 0) return 0; - var itemCountMap = {}; - var count = 0; - - nums.forEach((item, index) => { - itemCountMap[item] === undefined ? itemCountMap[item] = 1 : itemCountMap[item]++; - }); - - if (k === 0) { - for (var key in itemCountMap) { - if (itemCountMap[key] >= 2) { - count++; - } - } - } else { - for (var key in itemCountMap) { - if (itemCountMap[parseInt(key)+ k] !== undefined) { - count++; - } - } - } - - return count; -}; - -``` - - -### 538. [Convert BST to Greater Tree](https://leetcode.com/problems/convert-bst-to-greater-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {TreeNode} - */ -var convertBST = function(root) { - var sum = 0; - function traverse (root) { - if (root === null) return; - traverse(root.right); - root.val = root.val + sum; - sum = root.val; - traverse(root.left); - } - - traverse(root); - return root; -}; -``` - - -### 539. [Minimum Time Difference](https://leetcode.com/problems/minimum-time-difference/description/) -```javascript -/** - * @param {string[]} timePoints - * @return {number} - */ -var findMinDifference = function(timePoints) { - var ret = Number.MAX_SAFE_INTEGER; - var hour, min; - var mins = timePoints.map(time => { - [hour, min] = time.split(':').map(i => parseInt(i)); - - return hour * 60 + min; - }); - - mins = mins.sort((a, b) => a - b); - for (var i = 0; i < mins.length - 1; i++) { - ret = Math.min(ret, mins[i + 1] - mins[i]); - } - - ret = Math.min(ret, 24 * 60 + mins[0]- mins[mins.length - 1]); - - return ret; -}; -``` - - -### 541. [Reverse String II](https://leetcode.com/problems/reverse-string-ii/description/) -```javascript -/** - * @param {string} s - * @param {number} k - * @return {string} - */ -var reverseStr = function(s, k) { - var arr = s.split(''); - var reverse = true; - var ret = ""; - - for(var i = 0; i < arr.length; i = i + k) { - if (reverse) { - for (var j = Math.min(arr.length, i + k) - 1; j >= i; j--) { - ret += arr[j]; - } - } else { - for (var j = i; j < Math.min(arr.length, i + k); j++) { - ret += arr[j]; - } - } - - reverse = !reverse; - } - - return ret; -}; -``` - - -### 542. [01 Matrix](https://leetcode.com/problems/01-matrix/description/) -```javascript -/** - * @param {number[][]} matrix - * @return {number[][]} - */ -var updateMatrix = function(matrix) { - var m = matrix.length; - var n = matrix[0].length; - var queue = []; - - for (var i = 0; i < m; i++) { - for (var j = 0; j < n; j++) { - if (matrix[i][j] === 0) { - queue.push([i, j]); - } else { - matrix[i][j] = undefined; - } - } - } - - while (queue.length > 0) { - var [x, y] = queue.shift(); - var range = [[-1,0], [1, 0], [0, -1], [0, 1]]; - range.forEach(([p, q]) => { - p += x; - q += y; - if (p < 0 || p >= m || q < 0 || q >= n) return; - if (matrix[p][q] !== undefined && matrix[p][q] < matrix[x][y] + 1) return; - matrix[p][q] = matrix[x][y] + 1; - queue.push([p, q]); - }); - } - - return matrix; -}; - -``` - - -### 543. [Diameter of Binary Tree](https://leetcode.com/problems/diameter-of-binary-tree/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ - -var diameterOfBinaryTree = function(root) { - var maxDiameter = -1; - var getDepth = function(root) { - if (root === null) { - return 0; - } - var leftDepth = getDepth(root.left); - var rightDepth = getDepth(root.right); - - maxDiameter = Math.max(maxDiameter, leftDepth + rightDepth); - maxDepth = Math.max(leftDepth, rightDepth) + 1; - return maxDepth; - }; - - if (root === null) return 0; - getDepth(root); - - return maxDiameter; -}; -``` - - -### 544. [Output Contest Matches](https://leetcode.com/problems/output-contest-matches/description/) -```javascript -/** - * @param {number} n - * @return {string} - */ -function getMatch (match) { - if (match.length === 1) return match; - var ret = []; - var start = 0; - var end = match.length - 1; - var value; - - while (start < end) { - value = `(${match[start]},${match[end]})`; - ret.push(value); - start++; - end--; - } - - return getMatch(ret); -} -var findContestMatch = function(n) { - var match = []; - for (var i = 1; i <= n; i++) match.push(i); - - return getMatch(match)[0]; -}; -``` - - -### 545. [Boundary of Binary Tree](https://leetcode.com/problems/boundary-of-binary-tree/description/) -```javascript -/** -* @param {TreeNode} root -* @return {number[]} -*/ - -function rightBorder(node) { - if (node === null) return []; - var ret = []; - - ret.push(node.val); - while (node.left || node.right) { - if (node.right) { - ret.push(node.right.val); - node = node.right; - continue; - } - ret.push(node.left.val); - node = node.left; - } - return ret.reverse(); -} -function leftBorder(node) { - if (node === null) return []; - var ret = []; - - ret.push(node.val); - while (node.left || node.right) { - if (node.left) { - ret.push(node.left.val); - node = node.left; - continue; - } - ret.push(node.right.val); - node = node.right; - } - return ret; -} - -var boundaryOfBinaryTree = function(root) { - if (root === null) return []; - if (root.left === null && root.right === null) return [root.val]; - var leaf = []; - - function traversal (root) { - if (root === null) return true; - var isLeftNull = traversal(root.left); - var isRightNull = traversal(root.right); - if (isLeftNull && isRightNull) { - leaf.push(root.val); - return false; - } - } - - var up = [root.val] - var left = leftBorder(root.left); - var right = rightBorder(root.right); - traversal(root); - - var ret = up - .concat(left.slice(0, left.length - 1)) - .concat(leaf) - .concat(right.slice(1)); - - return ret; -}; -``` - - -### 546. [Remove Boxes](https://leetcode.com/problems/remove-boxes/description/) -```javascript -/** -* @param {number[]} boxes -* @return {number} -*/ - -function get(boxes, memo, i, j, k) { - if (i > j) return 0; - - if (memo[i][j][k] !== undefined) { - return memo[i][j][k]; - } - - var max = get(boxes, memo, i, j - 1, 0) + (k + 1) * (k + 1); - for (var m = i; m < j; m++) { - if (boxes[j] === boxes[m]) { - max = Math.max( - max, - get(boxes, memo, i, m, k + 1) + get(boxes, memo, m + 1, j - 1, 0) - ); - } - } - memo[i][j][k] = max; - return memo[i][j][k]; -} - -var removeBoxes = function(boxes) { - var memo = []; - for (var i = 0; i < boxes.length; i++) { - memo[i] = new Array(boxes.length); - for (var j = 0; j < boxes.length; j++) { - memo[i][j] = new Array(boxes.length); - } - } - - return get(boxes, memo, 0, boxes.length - 1, 0); -}; -``` - - -### 547. [Friend Circles](https://leetcode.com/problems/friend-circles/description/) -```javascript -/** - * @param {number[][]} M - * @return {number} - */ - -function nextUnVisitedIndex(isVisted) { - for (var i = 0; i < isVisted.length; i++) { - if (isVisted[i] === false) { - return i; - } - } - return -1; -} -var findCircleNum = function(M) { - var isVisited = new Array(M.length).fill(false); - var queue = []; - var count = 0; - var next = nextUnVisitedIndex(isVisited); - - while (next !== -1) { - queue.push(next); - count++; - while (queue.length > 0) { - var cur = queue.shift(); - isVisited[cur] = true; - - for (var i = 0; i < M.length; i++) { - if (M[cur][i] === 1 && cur !== i && isVisited[i] === false) { - queue.push(i); - } - } - } - next = nextUnVisitedIndex(isVisited); - } - - return count; -}; - - -``` - - -### 548. [Split Array with Equal Sum](https://leetcode.com/problems/split-array-with-equal-sum/description/) -```javascript -/** - * @param {number[]} nums - * @return {boolean} - */ -function getSum(memo, m, n) { - if (memo[m][n] !== undefined) { - return memo[m][n]; - } else { - memo[m][n] = getSum(memo, m, n - 1) + memo[n][n] - return memo[m][n]; - } -} -var splitArray = function(nums) { - var newArr = []; - var prev; - for (var i = 0; i < nums.length; i++) { - if (nums[i] === 0 && prev === 0) { - continue; - } - newArr.push(nums[i]); - prev = nums[i]; - } - nums = newArr; - - if (nums.length < 7) return false; - - var memo = []; - var len = nums.length; - for (var i = 0; i < len; i++) { - memo.push(new Array(len)); - memo[i][i] = nums[i]; - } - - for (var i = 1; i < len - 5; i++) { - var sum1 = getSum(memo, 0, i - 1); - - for (var j = i + 2; j < len - 3; j++) { - var sum2 = getSum(memo, i + 1, j - 1); - - if (sum1 !== sum2) continue; - for (var k = j + 2; k < len - 1; k++) { - var sum3 = getSum(memo, j + 1, k - 1); - var sum4 = getSum(memo, k + 1, len - 1); - - if (sum1 === sum3 && sum1 === sum4) { - return true; - } - } - } - } - - - return false; -}; -``` - - -### 549. [Binary Tree Longest Consecutive Sequence II](https://leetcode.com/problems/binary-tree-longest-consecutive-sequence-ii/description/) -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ - -var longestConsecutive = function(root) { - function getLongest(root) { - if (root === null) { - return null; - } - - var left = getLongest(root.left); - var right = getLongest(root.right); - - if (left === null) { - left = {}; - left.d = [root.val]; - left.i = [root.val]; - } - if (right === null) { - right = {}; - right.d = [root.val]; - right.i = [root.val]; - } - - if (left.d[left.d.length - 1] === root.val + 1 && - right.i[right.i.length - 1] === root.val - 1 - ) { - max = Math.max(max, left.d.length + right.i.length + 1); - } - if (right.d[right.d.length - 1] === root.val + 1 && - left.i[left.i.length - 1] === root.val - 1 - ) { - max = Math.max(max, right.d.length + left.i.length + 1); - } - - if (left.d[left.d.length - 1] === root.val + 1) { - left.d.push(root.val); - } else { - left.d = [root.val]; - } - if (left.i[left.i.length - 1] === root.val - 1) { - left.i.push(root.val); - } else { - left.i = [root.val]; - } - - if (right.d[right.d.length - 1] === root.val + 1) { - right.d.push(root.val); - } else { - right.d = [root.val]; - } - if (right.i[right.i.length - 1] === root.val - 1) { - right.i.push(root.val); - } else { - right.i = [root.val]; - } - max = Math.max(max, left.d.length, left.i.length, right.i.length, right.d.length); - - var ret = {}; - ret.d = left.d.length >= right.d.length ? left.d : right.d; - ret.i = left.i.length >= right.i.length ? left.i : right.i; - return ret; - } - - var max = 0; - getLongest(root); - - return max; -}; -``` - - -### 551. [Student Attendance Record I](https://leetcode.com/problems/student-attendance-record-i/description/) -```javascript -/** - * @param {string} s - * @return {boolean} - */ -var checkRecord = function(s) { - var absent = 0; - - for (var i = 0; i < s.length; i++) { - if (s[i] === 'A') absent++; - if (absent >= 2) { - return false; - } - if (i < s.length - 2 && s[i] === 'L' && s[i + 1] === 'L' && s[i + 2] === 'L') { - return false; - } - } - - return true; -}; -``` - - -### 553. [Optimal Division](https://leetcode.com/problems/optimal-division/description/) -```javascript -/** - * @param {number[]} nums - * @return {string} - */ -var optimalDivision = function(nums) { - if (nums.length === 1) { - return String(nums[0]) - } else if (nums.length === 2) { - return nums.join('/'); - } else { - return nums.join('/').replace('/','/(') + ')'; - } -}; -``` - - -### 556. [Next Greater Element III](https://leetcode.com/problems/next-greater-element-iii/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ - function swap(a, i, j) { - var tmp = a[i]; - a[i] = a[j]; - a[j] = tmp; - } - var nextGreaterElement = function(n) { - if (n < 10) return -1; - var a = String(n).split(''); - var max = a[a.length - 1]; - var minIndex; - var ret; - - for (var i = a.length - 2; i >= 0; i--) { - if (a[i] < max) { - minIndex = i + 1; - for (var j = i + 2; j < a.length; j++) { - if (a[j] > a[i] && a[j] < a[minIndex]) { - minIndex = j; - } - } - swap(a, i, minIndex); - ret = a.slice(0, i + 1).concat(a.slice(i + 1).sort()).join(''); - ret = parseInt(ret); - if (ret > Math.pow(2, 31)) { - break; - } - return ret; - } - if (a[i] > max) { - max = a[i]; - } - } - - return -1; - }; -``` - - -### 560. [Subarray Sum Equals K](https://leetcode.com/problems/subarray-sum-equals-k/description/) -```javascript -/** - * @param {number[]} nums - * @param {number} k - * @return {number} - */ -var subarraySum = function(nums, k) { - var len = nums.length; - var sum = 0; - var count = 0; - - for (var i = 0; i < len; i++) { - for (var j = i; j < len; j++) { - sum += nums[j]; - if (sum === k) { - count++ - } - } - sum = 0; - } - - return count; -}; -``` - - -### 561. [Array Partition I](https://leetcode.com/problems/array-partition-i/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var arrayPairSum = function(nums) { - nums = nums.sort((a, b) => a - b); - return nums.reduce((p, c, index) => { - return index % 2 === 0 ? p + c : p; - }); -}; -``` - - -### 562. [Longest Line of Consecutive One in Matrix](https://leetcode.com/problems/longest-line-of-consecutive-one-in-matrix/description/) -```javascript -/** - * @param {number[][]} M - * @return {number} - */ -var longestLine = function(M) { - if (M.length === 0) { - return 0; - } - var m = M.length; - var n = M[0].length; - var max = 0; - var dp = []; - for (var i = 0; i < m; i++) { - var tmp = []; - for (var j = 0; j < n; j++) { - tmp.push(new Array(4).fill(0)); - } - dp.push(tmp); - } - - for (var i = 0; i < m; i++) { - for (var j = 0; j < n; j++) { - if (M[i][j] === 0) { - continue; - } - for (var k = 0; k < 4; k++) { - dp[i][j][k] = 1; - } - if (j > 0) { - dp[i][j][0] = dp[i][j - 1][0] + 1; - } - if (i > 0) { - dp[i][j][1] = dp[i - 1][j][1] + 1; - } - if (i > 0 && j > 0) { - dp[i][j][2] = dp[i - 1][j - 1][2] + 1; - } - if (i > 0 && j < n - 1) { - dp[i][j][3] = dp[i - 1][j + 1][3] + 1; - } - max = Math.max(max, dp[i][j][0], dp[i][j][1], dp[i][j][2], dp[i][j][3]) - } - } - - return max; -}; -``` - - -### 617. [Merge Two Binary Trees](https://leetcode.com/problems/merge-two-binary-trees/description/) -```python -class Solution(object): - def mergeTrees(self, t1, t2): - if t1 and t2: - t1.val += t2.val - self.mergeChildTrees(t1, t2) - return t1 - elif t1: - return t1 - else: - return t2 - - def mergeChildTrees(self, t1, t2): - if t2 == None: - return - if t1.left and t2.left: - t1.left.val += t2.left.val - elif t2.left: - t1.left = t2.left - t2.left = None - - if t1.right and t2.right: - t1.right.val += t2.right.val - elif t2.right: - t1.right = t2.right - t2.right = None - - self.mergeChildTrees(t1.left, t2.left) - self.mergeChildTrees(t1.right, t2.right) -``` - - -### 646. [Maximum Length of Pair Chain](https://leetcode.com/problems/maximum-length-of-pair-chain/description/) -```javascript -/** - * @param {number[][]} pairs - * @return {number} - */ -var findLongestChain = function(pairs) { - pairs = pairs.sort((a, b) => a[0] - b[0]); - - var len = pairs.length; - var dp = Array(len).fill(1); - - for (var i = 1; i < len; i++) { - for (var j = 0; j < i; j++) { - if (pairs[i][0] > pairs[j][1]) { - dp[i] = Math.max(dp[i], dp[j] + 1); - } - } - } - - return Math.max.apply(null, dp); -}; -``` - - -### 647. [Palindromic Substrings](https://leetcode.com/problems/palindromic-substrings/description/) -```javascript -/** - * @param {string} s - * @return {number} - */ - -function isPalindromic(s) { - for (var i = 0, j = s.length - 1; i < j; i++, j--) { - if(s[i] !== s[j]) { - return false; - } - } - return true; -} -var countSubstrings = function(s) { - var count = 0; - var sub; - for(i = 0; i < s.length; i++) { - for(j = i + 1; j <= s.length; j++) { - sub = s.slice(i, j); - if (isPalindromic(sub)) { - count++; - } - } - } - return count; -}; -``` - - -### 650. [2 Keys Keyboard](https://leetcode.com/problems/2-keys-keyboard/description/) -```javascript -/** - * @param {number} n - * @return {number} - */ -var minSteps = function(n) { - if (n === 1) return 0; - var ret = 0; - for (var i = 2; i <= n; i++) { - while( n !== i) { - if (n % i === 0) { - n = n / i; - ret = ret + i; - } else { - break; - } - } - } - ret = ret + n; - return ret; -}; -``` - - -### 657. [Robot Return to Origin](https://leetcode.com/problems/robot-return-to-origin/description/) -```python -class Solution(object): - def judgeCircle(self, moves): - v = 0 - h = 0 - for i in moves: - if i == 'U': - v += 1 - elif i == 'D': - v -= 1 - elif i == 'L': - h -= 1 - elif i == 'R': - h += 1 - - return v == 0 and h == 0 -``` - - -### 681. [Next Closest Time](https://leetcode.com/problems/next-closest-time/description/) -```javascript -/** - * @param {string} time - * @return {string} - */ -var nextClosestTime = function(time) { - var cur = parseInt(time.slice(0, 2)) * 60 + parseInt(time.slice(3)); - var charMap = {}; - time.split('') - .filter(i => i != ':') - .forEach(key => charMap[key] = true); - - for (var i = 1; i <= 24 * 60; i++) { - var next = (cur + i) % (24 * 60); - var hour = parseInt(next / 60); - var min = next - hour * 60; - - var h1 = String(parseInt(hour / 10)); - var h2 = String(hour % 10); - var m1 = String(parseInt(min / 10)); - var m2 = String(parseInt(min % 10)); - - if (charMap[h1] && charMap[h2] && charMap[m1] && charMap[m2]) { - return h1 + h2 + ':' + m1 + m2; - } - } -}; -``` - - -### 686. [Repeated String Match](https://leetcode.com/problems/repeated-string-match/description/) -```python -class Solution(object): - def repeatedStringMatch(self, A, B): - count = 0 - target = '' - while (len(target) < len(B)): - target = target + A - count += 1 - if target.find(B) > -1: - return count - elif (target + A).find(B) > -1: - return count + 1 - else: - return -1 -``` - - -### 687. [Longest Univalue Path](https://leetcode.com/problems/longest-univalue-path/description/) -```python -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestUnivaluePath(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - self.maxPath = 0 - self.find(root, root.val) - return self.maxPath - - def find(self, node, val): - if node == None: - return 0 - left = self.find(node.left, node.val) - right = self.find(node.right, node.val) - self.maxPath = max(self.maxPath, right + left) - if node.val == val: - return max(right, left) + 1 - else: - return 0 -``` - - -### 712. [Minimum ASCII Delete Sum for Two Strings](https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/description/) -```javascript -/** - * @param {string} s1 - * @param {string} s2 - * @return {number} - */ -var minimumDeleteSum = function(s1, s2) { - var dp = Array(s1.length + 1).fill(0).map(() => Array(s2.length + 1).fill(0)); - for (var i = 1; i <= s1.length; i++) { - dp[i][0] = s1[i - 1].charCodeAt() + dp[i - 1][0]; - } - for (var j = 1; j <= s2.length; j++) { - dp[0][j] = s2[j - 1].charCodeAt() + dp[0][j - 1]; - } - - for (var i = 1; i <= s1.length; i++) { - for (var j = 1; j <= s2.length; j++) { - if (s1[i - 1] === s2[j - 1]) { - dp[i][j] = dp[i - 1][j - 1]; - } else { - dp[i][j] = Math.min( - dp[i - 1][j] + s1[i - 1].charCodeAt(), - dp[i][j - 1] + s2[j - 1].charCodeAt(), - ); - } - } - } - - return dp[s1.length][s2.length]; - -}; -``` - - -### 733. [Flood Fill](https://leetcode.com/problems/flood-fill/description/) -```javascript -/** - * @param {number[][]} image - * @param {number} sr - * @param {number} sc - * @param {number} newColor - * @return {number[][]} - */ -var floodFill = function(image, sr, sc, newColor) { - if (image.length === 0) { - return; - } - if (image[0].length === 0) { - return; - } - - var queue = [[sr,sc]]; - var isVisited = {}; - var oldColor = image[sr][sc]; - var option = [[1, 0], [-1, 0], [0, 1], [0, -1]]; - - while(queue.length > 0) { - var point = queue.shift(); - - isVisited[point[0] + '_' + point[1]] = true; - image[point[0]][point[1]] = newColor; - - option.forEach((delta) => { - var dest = [point[0] + delta[0], point[1] + delta[1]]; - if (isVisited[dest[0] + '_' + dest[1]] === undefined && - dest[0] >= 0 && dest[0] < image.length && dest[1] >= 0 && dest[1] < image[0].length && - image[dest[0]][dest[1]] === oldColor - ) { - queue.push(dest); - } - }) - } - return image; -}; -``` - - -### 740. [Delete and Earn](https://leetcode.com/problems/delete-and-earn/description/) -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var deleteAndEarn = function(nums) { - if(nums.length === 0) return 0; - if(nums.length === 1) return nums[0]; - - - var max = Math.max.apply(null, nums) - var len = max + 1; - - var map = {}; - for (var i = 0; i < len; i++) { - map[i] = 0; - } - for (var i = 0; i < nums.length; i++) { - map[nums[i]] += nums[i]; - } - - var dp = Array(len).fill(0); - dp[1] = map[1]; - - for (var i = 2; i < len; i++) { - dp[i] = Math.max( - map[i] + dp[i - 2], - dp[i - 1] - ) - } - - return dp[len - 1]; -}; -``` - - -### 747. [Min Cost Climbing Stairs](https://leetcode.com/problems/min-cost-climbing-stairs/description/) -```python -class Solution(object): - def minCostClimbingStairs(self, cost): - """ - :type cost: List[int] - :rtype: int - """ - count = len(cost) - dp = [None] * count - dp[0] = cost[0] - dp[1] = cost[1] - for i in range(2, count): - dp[i] = min(dp[i - 1] + cost[i], dp[i - 2] + cost[i]) - - return min(dp[count - 1], dp[count - 2]) -``` - - -### 909. [Stone Game](https://leetcode.com/problems/stone-game/description/) -```javascript -/** - * @param {number[]} piles - * @return {boolean} - */ -var stoneGame = function(piles) { - var len = piles.length; - const dp = Array(len).fill(0).map(() => Array(len).fill(0)); - - for (var i = i; i < len; i++) dp[i][i] = piles[i]; - - for (var j = 1; j < len; j++) { - for (var i = 0; i < len - j; i++) { - dp[i][j] = Math.max( - piles[i] - dp[i - i][j], - piles[j] - dp[i][j - 1] - ) - } - } - - return dp[0][len - 1] > 0; -}; -``` - diff --git a/images/checker.png b/images/checker.png new file mode 100644 index 0000000..7a65b23 Binary files /dev/null and b/images/checker.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..4831426 --- /dev/null +++ b/index.html @@ -0,0 +1,70 @@ + + + + + + Leedcode by duteng + + + + + + + + + +
+
+

Leedcode

+

+

View the Project on GitHub duteng/leedcode

+ +
+
+

+Welcome to GitHub Pages.

+ +

This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:

+ +
$ cd your_repo_root/repo_name
+$ git fetch origin
+$ git checkout gh-pages
+
+ +

If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.

+ +

+Designer Templates

+ +

We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.

+ +

+Rather Drive Stick?

+ +

If you prefer to not use the automatic generator, push a branch named gh-pages to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.

+ +

+Authors and Contributors

+ +

You can @mention a GitHub username to generate a link to their profile. The resulting <a> element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.

+ +

+Support or Contact

+ +

Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.

+
+
+ + + + + \ No newline at end of file diff --git a/javascripts/scale.fix.js b/javascripts/scale.fix.js new file mode 100644 index 0000000..08716c0 --- /dev/null +++ b/javascripts/scale.fix.js @@ -0,0 +1,20 @@ +fixScale = function(doc) { + + var addEvent = 'addEventListener', + type = 'gesturestart', + qsa = 'querySelectorAll', + scales = [1, 1], + meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; + + function fix() { + meta.content = 'width=device-width,minimum-scale=' + scales[0] + ',maximum-scale=' + scales[1]; + doc.removeEventListener(type, fix, true); + } + + if ((meta = meta[meta.length - 1]) && addEvent in doc) { + fix(); + scales = [.25, 1.6]; + doc[addEvent](type, fix, true); + } + +}; \ No newline at end of file diff --git a/old(deprecated)/Algorithms/01 Matrix/README.md b/old(deprecated)/Algorithms/01 Matrix/README.md deleted file mode 100644 index 86b12f7..0000000 --- a/old(deprecated)/Algorithms/01 Matrix/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# [01 Matrix](https://leetcode.com/problems/01-matrix/#/description) -###### No:`542` -###### Difficulty:`Medium` - - -### LeetCode Weekly Contest 24 -### 542. 01 Matrix -Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell. -The distance between two adjacent cells is 1. -#### Example 1 -Input: -``` -0 0 0 -0 1 0 -0 0 0 -``` -Output: -``` -0 0 0 -0 1 0 -0 0 0 -``` -#### Example 2 -Input: -``` -0 0 0 -0 1 0 -1 1 1 -``` -Output: -``` -0 0 0 -0 1 0 -1 2 1 -``` - -#### Solution -```js -/** - * @param {number[][]} matrix - * @return {number[][]} - */ -var updateMatrix = function(matrix) { - var m = matrix.length; - var n = matrix[0].length; - var queue = []; - - for (var i = 0; i < m; i++) { - for (var j = 0; j < n; j++) { - if (matrix[i][j] === 0) { - queue.push([i, j]); - } else { - matrix[i][j] = undefined; - } - } - } - - while (queue.length > 0) { - var [x, y] = queue.shift(); - var range = [[-1,0], [1, 0], [0, -1], [0, 1]]; - range.forEach(([p, q]) => { - p += x; - q += y; - if (p < 0 || p >= m || q < 0 || q >= n) return; - if (matrix[p][q] !== undefined && matrix[p][q] < matrix[x][y] + 1) return; - matrix[p][q] = matrix[x][y] + 1; - queue.push([p, q]); - }); - } - - return matrix; -}; -``` diff --git a/old(deprecated)/Algorithms/3Sum Closest/README.md b/old(deprecated)/Algorithms/3Sum Closest/README.md deleted file mode 100644 index 9a11268..0000000 --- a/old(deprecated)/Algorithms/3Sum Closest/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# [3Sum Closest](https://leetcode.com/problems/3sum-closest/) -###### No:`16` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[]} nums - * @param {number} target - * @return {number} - */ -var threeSumClosest = function(nums, target) { - var closet = Number.MAX_SAFE_INTEGER; - var closetTarget; - - nums = nums.sort((a, b) => a - b); - - for (var i = 0; i + 2 < nums.length; i++) { - if (i > 0 && nums[i] == nums[i - 1]) { - continue; - } - - var j = i + 1, k = nums.length - 1; - - while (j < k) { - if (Math.abs(nums[j] + nums[k] + nums[i] - target) < closet) { - closet = Math.abs(nums[j] + nums[k] + nums[i] - target); - closetTarget = nums[j] + nums[k] + nums[i]; - } - - if (nums[j] + nums[k] + nums[i] === target) { - return target; - } else if (nums[j] + nums[k] + nums[i] > target) { - k--; - } else { - j++; - } - } - } - - return closetTarget; -}; - -``` diff --git a/old(deprecated)/Algorithms/3Sum/README.md b/old(deprecated)/Algorithms/3Sum/README.md deleted file mode 100644 index 3523d60..0000000 --- a/old(deprecated)/Algorithms/3Sum/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# [3Sum](https://leetcode.com/problems/3sum/) -###### No:`15` -###### Difficulty:`Medium` - - -### Solution 1 -Result: `timeout` -How: Use the data structure SumNode. Make sure the key is unique. -```javascript -/** - * @param {number[]} nums - * @return {number[][]} - */ -var SumNode = function(nums, i, j) { - this.i = i; - this.j = j; - this.sum = nums[i] + nums[j]; - - var max = Math.max(nums[i], nums[j], -this.sum); - var min = Math.min(nums[i], nums[j], -this.sum); - var mid = 0 - max - min; - this.key = [max, mid, min].join('_'); - this.isUsed = false; - -} - -var threeSum = function (nums) { - var ret = []; - var sumNodes = {}; - var node = null; - - for (var i = 0; i < nums.length; i++) { - for (var j = i + 1; j < nums.length; j++) { - node = new SumNode(nums, i, j); - sumNodes[node.key] = node; - } - } - - for (var key in sumNodes) { - node = sumNodes[key]; - for(var k = 0; k < nums.length; k++) { - if (k !== node.i && - k !== node.j && - node.sum + nums[k] === 0 && - !node.isUsed - ) { - delete sumNodes[key]; - node.isUsed = true; - ret.push([nums[k], nums[node.i], nums[node.j]]); - } - } - } - - return ret; -}; - -``` - -### Solution 2 -Result: timeout -```javascript -/** - * @param {number[]} nums - * @return {number[][]} - */ - -var threeSum = function(nums) { - var ret = []; - - nums = nums.sort((a, b) => a - b); - for (var i = 0; i + 2 < nums.length; i++) { - if (i > 0 && nums[i] == nums[i - 1]) { - continue; - } - - var j = i + 1, k = nums.length - 1; - var target = -nums[i]; - - while (j < k) { - if (nums[j] + nums[k] == target) { - ret.push([nums[i], nums[j], nums[k]]); - j++; - k--; - while (j < k && nums[j] == nums[j - 1]) j++; - while (j < k && nums[k] == nums[k + 1]) k--; - } else if (nums[j] + nums[k] > target) { - k--; - } else { - j++; - } - } - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Add Digits/README.md b/old(deprecated)/Algorithms/Add Digits/README.md deleted file mode 100644 index 1425167..0000000 --- a/old(deprecated)/Algorithms/Add Digits/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# [Add Digits](https://leetcode.com/problems/add-digits/) -###### No:`258` -###### Difficulty:`Easy` - - -#### Solution 1: -```javascript -/** - * @param {number} num - * @return {number} - */ -var addDigits = function(num) { - if(num < 10) { - return num; - } else { - var arr = (num + '').split(''); - var ret = arr.reduce(function(prev, cur) { - return parseInt(prev, 10) + parseInt(cur, 10); - }); - return addDigits(ret); - } -}; -``` - - -#### Solution 2: -```javascript -/** - * @param {number} num - * @return {number} - */ -var addDigits = function(num) { - return 1 + (num - 1) % 9; -}; -``` diff --git a/old(deprecated)/Algorithms/Add Strings/README.md b/old(deprecated)/Algorithms/Add Strings/README.md deleted file mode 100644 index 4658de4..0000000 --- a/old(deprecated)/Algorithms/Add Strings/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# [Add Strings](https://leetcode.com/problems/add-strings/) -###### No:`415` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} num1 - * @param {string} num2 - * @return {string} - */ -var addStrings = function(num1, num2) { - var zeroString = Array(Math.abs(num1.length - num2.length) + 1).join(0); - if (num1.length > num2.length) { - num2 = zeroString + num2; - } else { - num1 = zeroString + num1; - } - - var d1 = num1.split(''); - var d2 = num2.split(''); - var ret = []; - var sum ; - var hasCarryOver = false; - - for(var i = d1.length - 1; i >= 0 ; i--) { - sum = parseInt(d1[i]) + parseInt(d2[i]); - if (hasCarryOver) { - sum++; - } - if(sum >= 10) { - sum -= 10; - hasCarryOver = true; - } else { - hasCarryOver = false; - } - ret.unshift(sum); - } - - if(hasCarryOver) { - ret.unshift(1); - } - - return ret.join(''); -}; - -``` diff --git a/old(deprecated)/Algorithms/Arithmetic Slices/README.md b/old(deprecated)/Algorithms/Arithmetic Slices/README.md deleted file mode 100644 index 7dc61a4..0000000 --- a/old(deprecated)/Algorithms/Arithmetic Slices/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# [Arithmetic Slices](https://leetcode.com/problems/arithmetic-slices/#/description) -###### No:`413` -###### Difficulty:`Medium` - - - -```js -/** - * @param {number[]} A - * @return {number} - */ -var count = function(len) { - return len < 3 ? 0 : (1+ len - 2) * (len - 2) / 2; -}; - -var numberOfArithmeticSlices = function(A) { - if (A.length < 3) return 0; - var len = 2; - var diff = A[1] - A[0]; - var ret = 0; - - for (var i = 1; i < A.length - 1; i++) { - if (diff === A[i + 1] - A[i]) { - len++ - } else { - ret += count(len); - diff = A[i + 1] - A[i]; - len = 2; - } - } - ret += count(len); - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Arranging Coins/README.md b/old(deprecated)/Algorithms/Arranging Coins/README.md deleted file mode 100644 index 712bcea..0000000 --- a/old(deprecated)/Algorithms/Arranging Coins/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# [Arranging Coins](https://leetcode.com/problems/arranging-coins/#/description) -###### No:`441` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} n - * @return {number} - */ -var arrangeCoins = function(n) { - if (n === 0) {return 0;} - var start = 0; - var end = n; - var middle = parseInt((start + end + 1) / 2); - - while (start <= end) { - if ((1 + middle) * middle / 2 <= n && n < (2 + middle) * (middle + 1) / 2) { - return middle; - } else if ((2 + middle) * (middle + 1) / 2 <= n) { - start = middle + 1; - } else if ((1 + middle) * middle / 2 > n) { - end = middle - 1; - } - middle = parseInt((start + end) / 2); - } -}; - -``` diff --git a/old(deprecated)/Algorithms/Assign Cookies/README.md b/old(deprecated)/Algorithms/Assign Cookies/README.md deleted file mode 100644 index cfee914..0000000 --- a/old(deprecated)/Algorithms/Assign Cookies/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# [Assign Cookies](https://leetcode.com/problems/assign-cookies/) -###### No:`455` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} g - * @param {number[]} s - * @return {number} - */ -var findContentChildren = function(g, s) { - var compare = (a, b) => a - b; - g = g.sort(compare); - s = s.sort(compare); - - var i = s.length - 1; // person index - var j = g.length - 1; // cookie index - var count = 0; - - while (i >= 0 && j >= 0) { - if(s[i] >= g[j]) { - i--; - j--; - count++ - } else { - j--; - } - } - - return count; -}; -``` diff --git a/old(deprecated)/Algorithms/Balanced Binary Tree/README.md b/old(deprecated)/Algorithms/Balanced Binary Tree/README.md deleted file mode 100644 index 10475e3..0000000 --- a/old(deprecated)/Algorithms/Balanced Binary Tree/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# [Balanced Binary Tree](https://leetcode.com/problems/balanced-binary-tree/) -###### No:`110` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {boolean} - */ -var maxDeepth = function(root) { - if(root === null) { - return 0; - } else { - return Math.max(maxDeepth(root.left), maxDeepth(root.right)) + 1; - } -} -var isBalanced = function(root) { - if(root === null) { - return true; - } - var leftDeepth = maxDeepth(root.left); - var rightDeepth = maxDeepth(root.right); - - if(Math.abs(leftDeepth - rightDeepth) <= 1 - && isBalanced(root.left) - && isBalanced(root.right) - ) { - return true; - } else { - return false; - } -}; -``` - -#### Description: -Calculate the deepth of the Binary Tree is also a problem in here: [https://leetcode.com/problems/maximum-depth-of-binary-tree](https://leetcode.com/problems/maximum-depth-of-binary-tree) diff --git a/old(deprecated)/Algorithms/Base 7/README.md b/old(deprecated)/Algorithms/Base 7/README.md deleted file mode 100644 index b470ec3..0000000 --- a/old(deprecated)/Algorithms/Base 7/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# [Base 7](https://leetcode.com/problems/base-7/#/description) -###### No:`504` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} num - * @return {string} - */ -var convertToBase7 = function(num) { - if (num < 0) return '-' + convertToBase7(-num); - else if (num < 7) return String(num); - else return convertToBase7(parseInt(num / 7)) + num % 7; -}; -``` diff --git a/old(deprecated)/Algorithms/Beautiful Arrangement/README.md b/old(deprecated)/Algorithms/Beautiful Arrangement/README.md deleted file mode 100644 index 4f0722b..0000000 --- a/old(deprecated)/Algorithms/Beautiful Arrangement/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# [Beautiful Arrangement](https://leetcode.com/problems/beautiful-arrangement/#/description) -###### No:`526` -###### Difficulty:`Medium` - - - -```js -/** - * @param {number} N - * @return {number} - */ -var countArrangement = function(N) { - var position = []; - for (var i = 1; i <= N; i++) position.push(i); - var value = position.slice(); - - var ret = 0; - var count = function(position, value) { - if (position.length === 1 && value.length === 1) { - if (position[0] % value[0] === 0 || value[0] % position[0] === 0) { - ret++; - } - return - } - for (var i = 0; i < position.length; i++) { - if (position[i] % value[0] === 0 || value[0] % position[i] === 0) { - count(position.slice(0, i).concat(position.slice(i + 1)), value.slice(1)); - } - } - }; - count(position, value); - return ret; -}; - -``` diff --git a/old(deprecated)/Algorithms/Best Time to Buy and Sell Stock II/README.md b/old(deprecated)/Algorithms/Best Time to Buy and Sell Stock II/README.md deleted file mode 100644 index 47071af..0000000 --- a/old(deprecated)/Algorithms/Best Time to Buy and Sell Stock II/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# [Best Time to Buy and Sell Stock II](https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/) -###### No:`122` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[]} prices - * @return {number} - */ -var maxProfit = function(prices) { - var minsum = 0; - var maxsum = 0; - var isUp; - var lastIsUp; - - for(var i = 0; i < prices.length - 1; i++) { - if(prices[i] < prices[i+1]) { - isUp = true; - } else { - isUp = false; - } - if(isUp && (i === 0 || lastIsUp === false)) { - minsum += prices[i]; - } - if(lastIsUp && isUp === false) { - maxsum += prices[i]; - } - if(isUp && i === prices.length - 2) { - maxsum += prices[i + 1]; - } - lastIsUp = isUp; - } - return maxsum - minsum; -}; -``` diff --git a/old(deprecated)/Algorithms/Best Time to Buy and Sell Stock/README.md b/old(deprecated)/Algorithms/Best Time to Buy and Sell Stock/README.md deleted file mode 100644 index 3d83f5c..0000000 --- a/old(deprecated)/Algorithms/Best Time to Buy and Sell Stock/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/#/description) -###### No:`121` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} prices - * @return {number} - */ -var maxProfit = function(prices) { - var min = Number.MAX_VALUE; - var profit = 0; - - for(var i = 0; i < prices.length; i++) { - min = Math.min(min, prices[i]); - profit = Math.max(profit, prices[i] - min); - } - - return profit; -}; -``` diff --git a/old(deprecated)/Algorithms/Binary Tree Level Order Traversal II/README.md b/old(deprecated)/Algorithms/Binary Tree Level Order Traversal II/README.md deleted file mode 100644 index 22b3407..0000000 --- a/old(deprecated)/Algorithms/Binary Tree Level Order Traversal II/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# [Binary Tree Level Order Traversal II](https://leetcode.com/problems/binary-tree-level-order-traversal-ii/) -###### No:`107` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[][]} - */ -var traversal = function(ret, root, depth) { - if(root === null) { - return; - } - if(!Array.isArray(ret[depth])) { - ret[depth] = []; - } - ret[depth].push(root.val); - traversal(ret, root.left, depth + 1); - traversal(ret, root.right, depth + 1); -} -var levelOrderBottom = function(root) { - var ret = []; - traversal(ret, root, 0); - return ret.reverse(); -}; -``` diff --git a/old(deprecated)/Algorithms/Binary Tree Level Order Traversal/README.md b/old(deprecated)/Algorithms/Binary Tree Level Order Traversal/README.md deleted file mode 100644 index 691ec4f..0000000 --- a/old(deprecated)/Algorithms/Binary Tree Level Order Traversal/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/) -###### No:`102` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[][]} - */ -var traversal = function(ret, root, depth) { - if(root === null) { - return; - } - if(!Array.isArray(ret[depth])) { - ret[depth] = []; - } - ret[depth].push(root.val); - traversal(ret, root.left, depth + 1); - traversal(ret, root.right, depth + 1); -} - -var levelOrder = function(root) { - var ret = []; - traversal(ret, root, 0); - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Binary Tree Paths/README.md b/old(deprecated)/Algorithms/Binary Tree Paths/README.md deleted file mode 100644 index c93ac26..0000000 --- a/old(deprecated)/Algorithms/Binary Tree Paths/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# [Binary Tree Paths](https://leetcode.com/problems/binary-tree-paths/) -###### No:`257` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {string[]} - */ -var binaryTreePaths = function(root) { - if(root === null) { - return []; - } - var ret = []; - var str = arguments[1] ? arguments[1] : ''; - if(str) { - str = str + '->' + root.val; - } else { - str = root.val + ''; - } - if(root.left === null && root.right === null) { - ret.push(str); - } - - if(root.left) { - var leftRet = binaryTreePaths(root.left, str); - Array.prototype.push.apply(ret, leftRet); - } - if(root.right) { - var rightRet = binaryTreePaths(root.right, str); - Array.prototype.push.apply(ret, rightRet); - } - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Binary Tree Preorder Traversal/README.md b/old(deprecated)/Algorithms/Binary Tree Preorder Traversal/README.md deleted file mode 100644 index ce02dd9..0000000 --- a/old(deprecated)/Algorithms/Binary Tree Preorder Traversal/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# [Binary Tree Preorder Traversal](https://leetcode.com/problems/binary-tree-preorder-traversal/) -###### No:`144` -###### Difficulty:`Medium` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ - -var preorderTraversal = function(root) { - if(root === null) return []; - var ret = []; - - function pre(root) { - if(root) { - ret.push(root.val); - pre(root.left); - pre(root.right); - } - } - - pre(root); - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Binary Watch/README.md b/old(deprecated)/Algorithms/Binary Watch/README.md deleted file mode 100644 index 78699b3..0000000 --- a/old(deprecated)/Algorithms/Binary Watch/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# [Binary Watch](https://leetcode.com/problems/binary-watch/) -###### No:`401` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} num - * @return {string[]} - */ - -var bitcount1 = function (num) { - return (num).toString(2).split('').filter(i => i === '1').length; -} -var formatTime = function(h, m) { - if (m < 10) { - return `${h}:0${m}` - } else { - return `${h}:${m}` - } -} - -var readBinaryWatch = function(num) { - var ret = []; - - for (var h = 0; h < 12; h++) { - for (var m = 0; m < 60; m++) { - if(bitcount1(h << 6 | m) === num) { - ret.push(formatTime(h, m)); - } - } - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Bulb Switcher/README.md b/old(deprecated)/Algorithms/Bulb Switcher/README.md deleted file mode 100644 index 276441f..0000000 --- a/old(deprecated)/Algorithms/Bulb Switcher/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# [Add Digits](https://leetcode.com/problems/add-digits/) -###### No:`319` -###### Difficulty:`Medium` - - -#### Solution 1: -refer: https://leetcode.com/discuss/91371/share-my-o-1-solution-with-explanation -```js -/** - * @param {number} n - * @return {number} - */ -var bulbSwitch = function(n) { - return parseInt(Math.sqrt(n)); -}; -``` - - -#### Solution 2: -#### Time Limit Exceeded. Input: 9999999 -```js -/** - * @param {number} n - * @return {number} - */ -var bulbSwitch = function(n) { - var bulbs = new Array(n).fill(0); - for(i = 1; i <= n; i++) { - for(var j = i; j <= n; j = j + i) { - bulbs[j-1] = 1 - bulbs[j-1]; - } - } - var sum = 0; - - for(var i = 0; i < bulbs.length; i++) { - if(bulbs[i] == 1) { - sum++; - } - } - return sum; -}; -``` diff --git a/old(deprecated)/Algorithms/Climbing Stairs/README.md b/old(deprecated)/Algorithms/Climbing Stairs/README.md deleted file mode 100644 index 73d87cb..0000000 --- a/old(deprecated)/Algorithms/Climbing Stairs/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/) -###### No:`70` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return - * - * s[n] = s[n-1] + s[n] - * s[1] = 1; - * s[2] = 2; - */ -var climbStairs = function(n) { - var s = {}; - s[1] = 1; - s[2] = 2; - for(var i = 3; i<=n; i++) { - s[i] = s[i-1] + s[i-2]; - } - return s[n]; -}; -``` diff --git a/old(deprecated)/Algorithms/Compare Version Numbers/README.md b/old(deprecated)/Algorithms/Compare Version Numbers/README.md deleted file mode 100644 index 7164fa4..0000000 --- a/old(deprecated)/Algorithms/Compare Version Numbers/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# [Compare Version Numbers](https://leetcode.com/problems/compare-version-numbers/) -###### No:`165` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} version1 - * @param {string} version2 - * @return {number} - */ -var compareVersion = function(version1, version2) { - var arr1 = version1.split('.').map(function(item) { - return parseInt(item); - }); - var arr2 = version2.split('.').map(function(item) { - return parseInt(item); - }); - var a, b; - for(var i = 0; i < arr1.length || i < arr2.length; i++) { - a = i >= arr1.length ? 0 : arr1[i]; - b = i >= arr2.length ? 0 : arr2[i]; - if(a > b) { - return 1; - } else if(a < b) { - return -1; - } - } - return 0; -}; -``` diff --git a/old(deprecated)/Algorithms/Construct the Rectangle/README.md b/old(deprecated)/Algorithms/Construct the Rectangle/README.md deleted file mode 100644 index 4049f65..0000000 --- a/old(deprecated)/Algorithms/Construct the Rectangle/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# [Construct the Rectangle](https://leetcode.com/problems/construct-the-rectangle/#/description) -###### No:`492` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} area - * @return {number[]} - */ -var constructRectangle = function(area) { - var root = parseInt(Math.sqrt(area)); - var ret = []; - for (var i = root; i <= area; i++) { - if (area % i === 0) { - i > area / i ? ret.push(i, area / i) : ret.push(area / i, i); - break; - } - } - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Contains Duplicate II/README.md b/old(deprecated)/Algorithms/Contains Duplicate II/README.md deleted file mode 100644 index 5038eb4..0000000 --- a/old(deprecated)/Algorithms/Contains Duplicate II/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# [Contains Duplicate II](https://leetcode.com/problems/contains-duplicate-ii/) -###### No:`219` -###### Difficulty:`Easy` - - -#### Solution 1: (slower) -```javascript -var containsNearbyDuplicate = function(nums, k) { - for(var i = 0; i < nums.length; i++) { - for(var j = i + 1; j < nums.length && j - i <= k; j++) { - if(nums[i] === nums[j]) { - return true; - } - } - } - return false; -}; -``` - -#### Solution 2: (faster) -```javascript -var containsNearbyDuplicate = function(nums, k) { - var index = {}; - var value; - for(var i = 0; i < nums.length; i++) { - value = nums[i]; - if(index[value] === undefined) { - index[value] = [i]; - } else if(i - index[value][index[value].length - 1] <= k){ - return true; - } else { - index[value].push(i); - } - } - return false; -} -``` diff --git a/old(deprecated)/Algorithms/Contains Duplicate/README.md b/old(deprecated)/Algorithms/Contains Duplicate/README.md deleted file mode 100644 index ebc9fa4..0000000 --- a/old(deprecated)/Algorithms/Contains Duplicate/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# [Contains Duplicate](https://leetcode.com/problems/contains-duplicate/) -###### No:`217` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @return {boolean} - */ -var containsDuplicate = function(nums) { - for(var i = 0; i < nums.length; i++) { - for(var j = i + 1 ; j < nums.length; j++) { - if(nums[i] == nums[j]) { - return true; - } - } - } - return false; -}; -``` diff --git a/old(deprecated)/Algorithms/Convert BST to Greater Tree/README.md b/old(deprecated)/Algorithms/Convert BST to Greater Tree/README.md deleted file mode 100644 index b199004..0000000 --- a/old(deprecated)/Algorithms/Convert BST to Greater Tree/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# [Convert BST to Greater Tree](https://leetcode.com/problems/convert-bst-to-greater-tree/#/description) -###### No:`538` -###### Difficulty:`Medium` - - -### LeetCode Weekly Contest 24 -### 538. Convert BST to Greater Tree -Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST. - -#### Example -``` -Input: The root of a Binary Search Tree like this: - 5 - / \ - 2 13 - -Output: The root of a Greater Tree like this: - 18 - / \ - 20 13 -``` -#### Solution -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {TreeNode} - */ -var convertBST = function(root) { - var sum = 0; - function traverse (root) { - if (root === null) return; - traverse(root.right); - root.val = root.val + sum; - sum = root.val; - traverse(root.left); - } - - traverse(root); - return root; -}; -``` - diff --git a/old(deprecated)/Algorithms/Convert Sorted Array to Binary Search Tree/README.md b/old(deprecated)/Algorithms/Convert Sorted Array to Binary Search Tree/README.md deleted file mode 100644 index a2c02ff..0000000 --- a/old(deprecated)/Algorithms/Convert Sorted Array to Binary Search Tree/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# [Convert Sorted Array to Binary Search Tree](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/#/description) -###### No:`108` -###### Difficulty:`Easy` -## JavaScript - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {number[]} nums - * @return {TreeNode} - */ - -var sortedArrayToBST = function(nums) { - if (nums.length === 0) {return null;} - var start = 0; - var end = nums.length - 1; - var middle = parseInt((start + end) / 2); - - var root, node1, node2, node3; - - if (nums.length <= 3) { - node1 = new TreeNode(nums[0]); - if (nums.length === 1) { - return node1; - } - - node2 = new TreeNode(nums[1]); - node2.left = node1; - if (nums.length === 2) { - return node2; - } - - node3 = new TreeNode(nums[2]); - node2.right = node3; - return node2; - - } else { - root = new TreeNode(nums[middle]); - root.left = sortedArrayToBST(nums.slice(0, middle)); - root.right = sortedArrayToBST(nums.slice(middle + 1)); - } - return root; -}; -``` diff --git a/old(deprecated)/Algorithms/Copy List with Random Pointer/README.md b/old(deprecated)/Algorithms/Copy List with Random Pointer/README.md deleted file mode 100644 index 18df542..0000000 --- a/old(deprecated)/Algorithms/Copy List with Random Pointer/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# [Copy List with Random Pointer](https://leetcode.com/problems/copy-list-with-random-pointer/#/description) -###### No:`138` -###### Difficulty:`Medium` - - - -```js -/** - * Definition for singly-linked list with a random pointer. - * function RandomListNode(label) { - * this.label = label; - * this.next = this.random = null; - * } - */ - -/** - * @param {RandomListNode} head - * @return {RandomListNode} - */ - -var copyLinkList = function(head) { - if (head === null) { - return null; - } - - var new_head = new RandomListNode(head.label); - var new_current = new_head; - var node; - - head = head.next; - while(head !== null) { - node = new RandomListNode(head.label); - new_current.next = node; - new_current = node; - head = head.next; - } - - return new_head; -}; - -var copyRandomList = function(head) { - if (head === null) { - return null; - } - - var new_head = copyLinkList(head); - var new_list = []; - var old_list = []; - - var new_curr = new_head; - var old_curr = head; - while (new_curr !== null) { - new_list.push(new_curr); - old_list.push(old_curr); - new_curr = new_curr.next; - old_curr = old_curr.next; - } - - for (var i = 0; i < new_list.length; i++) { - new_list[i].random = old_list[i]; - old_list[i].next = new_list[i]; - } - - for (i = 0; i < new_list.length; i++) { - if (old_list[i].random === null) { - new_list[i].random = null; - } else { - new_list[i].random = old_list[i].random.next; - } - } - - for (i = 0; i < old_list.length - 1; i++) { - old_list[i].next = old_list[i + 1]; - } - old_list[old_list.length - 1].next = null; - - - return new_head; -}; - - -``` diff --git a/old(deprecated)/Algorithms/Count Primes/README.md b/old(deprecated)/Algorithms/Count Primes/README.md deleted file mode 100644 index 310ad9c..0000000 --- a/old(deprecated)/Algorithms/Count Primes/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# [Count Primes](https://leetcode.com/problems/count-primes/#/description) -###### No:`204` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} n - * @return {number} - */ -var countPrimes = function(n) { - var isPrime = []; - for (var i = 2; i < n; i++) { - isPrime[i] = true; - } - - for (var i = 2; i * i < n; i++) { - if (isPrime[i]) { - for (var j = i * i; j < n; j += i) { - isPrime[j] = false; - } - } - } - - var count = 0; - for (var i = 2; i < n; i++) { - if (isPrime[i]) { - count++; - } - } - - return count; -}; - -``` diff --git a/old(deprecated)/Algorithms/Count and Say/README.md b/old(deprecated)/Algorithms/Count and Say/README.md deleted file mode 100644 index 2feb67e..0000000 --- a/old(deprecated)/Algorithms/Count and Say/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# [Count and Say](https://leetcode.com/problems/count-and-say/#/description) -###### No:`38` -###### Difficulty:`Easy` -## JavaScript - - -```js -/** - * @param {number} n - * @return {string} - */ - -var countAndSay = function(n) { - if (n === 1) return '1'; - - var last = countAndSay(n - 1); - var digit = last[0]; - var count = 0; - var ret = ''; - - for (var i = 0; i < last.length; i++) { - if (last[i] !== digit) { - ret += count + digit; - digit = last[i]; - count = 0; - } - count++; - } - ret += count + digit; - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Counting Bits/README.md b/old(deprecated)/Algorithms/Counting Bits/README.md deleted file mode 100644 index 7da8c2a..0000000 --- a/old(deprecated)/Algorithms/Counting Bits/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Counting Bits](https://leetcode.com/problems/counting-bits/) -###### No:`338` -###### Difficulty:`Medium` - - -```javascript -var countBits = function(num) { - var ret = [0]; - var j = 1; - for(var i = 1; i <= num; i++) { - if(i == 1) {ret.push(1);continue;} - if(i == Math.pow(2, j+1)) j++; - ret.push(ret[i - Math.pow(2, j)] + 1); - } - return ret; -}; -``` - -#### How to solve? -DP: -countBits[0] = 0; -countBits[1] = 1; - -condition: max(j) && n>= Math.pow(2, j) -countBits[n] = countBits[n - Math.pow(2, j)] + 1; diff --git a/old(deprecated)/Algorithms/Delete Node in a BST/README.md b/old(deprecated)/Algorithms/Delete Node in a BST/README.md deleted file mode 100644 index cc5c58e..0000000 --- a/old(deprecated)/Algorithms/Delete Node in a BST/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# [Delete Node in a BST](https://leetcode.com/problems/delete-node-in-a-bst/#/description) -###### No:`450` -###### Difficulty:`Medium` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {number} key - * @return {TreeNode} - */ -var update = function(parent, direction) { - if (parent === null) { - return; - } - var deleteNode = parent[direction]; - if (deleteNode.right) { - parent[direction] = deleteNode.right; - - var leftIsNullNode = deleteNode.right; - while(leftIsNullNode.left !== null) leftIsNullNode = leftIsNullNode.left; - leftIsNullNode.left = deleteNode.left; - return parent; - } - if(deleteNode.left) { - parent[direction] = deleteNode.left; - return parent; - } - parent[direction] = null; - return parent; -}; - -var search = function(root, direction, key, ret) { - var node = root[direction]; - if (node === null) { - return; - } - - if (node.val === key) { - ret.parent = root; - ret.direction = direction; - } else if (node.val > key) { - search(node, 'left', key, ret); - } else { - search(node, 'right', key, ret); - } -}; - -var deleteNode = function(root, key) { - if (root === null) { - return null; - } - - if (root.val === key) { - if (root.right) { - var leftIsNullNode = root.right; - while(leftIsNullNode.left !== null) leftIsNullNode = leftIsNullNode.left; - - leftIsNullNode.left = root.left; - return root.right; - } - return root.left; - } - - var ret = { - parent: null, - direction: null, - }; - search(root, 'left', key, ret); - search(root, 'right', key, ret); - update(ret.parent, ret.direction); - - return root; -}; - -``` diff --git a/old(deprecated)/Algorithms/Delete Node in a Linked List/README.md b/old(deprecated)/Algorithms/Delete Node in a Linked List/README.md deleted file mode 100644 index ade4793..0000000 --- a/old(deprecated)/Algorithms/Delete Node in a Linked List/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# [Delete Node in a Linked List](https://leetcode.com/problems/delete-node-in-a-linked-list/) -###### No:`237` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} node - * @return {void} Do not return anything, modify node in-place instead. - */ -var deleteNode = function(node) { - node.val = node.next.val; - node.next = node.next.next; -}; -``` diff --git a/old(deprecated)/Algorithms/Detect Capital/README.md b/old(deprecated)/Algorithms/Detect Capital/README.md deleted file mode 100644 index e6b21bc..0000000 --- a/old(deprecated)/Algorithms/Detect Capital/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# [Detect Capital](https://leetcode.com/problems/detect-capital/#/description) -###### No:`520` -###### Difficulty:`Easy` - - - -```js -/** - * @param {string} word - * @return {boolean} - */ -var detectCapitalUse = function(word) { - return /^[A-Z]?([a-z]*|[A-Z]*)$/.test(word); -}; -``` diff --git a/old(deprecated)/Algorithms/Diameter of Binary Tree/README.md b/old(deprecated)/Algorithms/Diameter of Binary Tree/README.md deleted file mode 100644 index e6da936..0000000 --- a/old(deprecated)/Algorithms/Diameter of Binary Tree/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# [Diameter of Binary Tree](https://leetcode.com/problems/diameter-of-binary-tree/#/description) -###### No:`543` -###### Difficulty:`Easy` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ - -var diameterOfBinaryTree = function(root) { - var maxDiameter = -1; - var getDepth = function(root) { - if (root === null) { - return 0; - } - var leftDepth = getDepth(root.left); - var rightDepth = getDepth(root.right); - - maxDiameter = Math.max(maxDiameter, leftDepth + rightDepth); - maxDepth = Math.max(leftDepth, rightDepth) + 1; - return maxDepth; - }; - - if (root === null) return 0; - getDepth(root); - - return maxDiameter; -}; -``` diff --git a/old(deprecated)/Algorithms/Divide Two Integers/README.md b/old(deprecated)/Algorithms/Divide Two Integers/README.md deleted file mode 100644 index 5a68b07..0000000 --- a/old(deprecated)/Algorithms/Divide Two Integers/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Divide Two Integers](https://leetcode.com/problems/divide-two-integers/#/description) -###### No:`29` -###### Difficulty:`Medium` -## JavaScript - - -```java -class Solution { -public: - int divide(int dividend, int divisor) { - if (!divisor || (dividend == INT_MIN && divisor == -1)) - return INT_MAX; - int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1; - long long dvd = labs(dividend); - long long dvs = labs(divisor); - int res = 0; - while (dvd >= dvs) { - long long temp = dvs, multiple = 1; - while (dvd >= (temp << 1)) { - temp <<= 1; - multiple <<= 1; - } - dvd -= temp; - res += multiple; - } - return sign == 1 ? res : -res; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Evaluate Reverse Polish Notation/README.md b/old(deprecated)/Algorithms/Evaluate Reverse Polish Notation/README.md deleted file mode 100644 index 56ec469..0000000 --- a/old(deprecated)/Algorithms/Evaluate Reverse Polish Notation/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# [Evaluate Reverse Polish Notation](https://leetcode.com/problems/evaluate-reverse-polish-notation/) -###### No:`150` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {string[]} tokens - * @return {number} - */ - var evalRPN = function(tokens) { - var stack = []; - var a, b, result; - for(var i = 0; i < tokens.length; i++) { - if(Number.isNaN(parseInt(tokens[i]))) { - b = stack.pop(); - a = stack.pop(); - if(tokens[i] == '+') { - result = a + b; - } else if(tokens[i] == '-') { - result = a - b; - } else if(tokens[i] == '*') { - result = a * b; - } else if(tokens[i] == '/') { - result = a / b; - } - stack.push(parseInt(result, 10)); - } else { - stack.push(parseInt(tokens[i], 10)); - } - } - return stack.pop(); -}; -``` diff --git a/old(deprecated)/Algorithms/Excel Sheet Column Number/README.md b/old(deprecated)/Algorithms/Excel Sheet Column Number/README.md deleted file mode 100644 index 9532661..0000000 --- a/old(deprecated)/Algorithms/Excel Sheet Column Number/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# [Excel Sheet Column Number](https://leetcode.com/problems/excel-sheet-column-number/) -###### No:`171` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @return {number} - */ -var titleToNumber = function(s) { - var arr = s.split(''); - var digit; - var sum = 0; - for(var i = arr.length - 1, j = 0; i >= 0; i--, j++) { - digit = arr[i].charCodeAt(0) - 64; - sum += digit * Math.pow(26, j) - } - return sum; -}; -``` diff --git a/old(deprecated)/Algorithms/Excel Sheet Column Title/README.md b/old(deprecated)/Algorithms/Excel Sheet Column Title/README.md deleted file mode 100644 index 813aab6..0000000 --- a/old(deprecated)/Algorithms/Excel Sheet Column Title/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# [Excel Sheet Column Title](https://leetcode.com/problems/excel-sheet-column-title/) -###### No:`168` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return {string} - */ -var convertToTitle = function(n) { - var ret = '' - while(n > 0) { - n--; - ret = String.fromCharCode(65 + n % 26) + ret; - n = Math.floor(n / 26); - } - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Factorial Trailing Zeroes/README.md b/old(deprecated)/Algorithms/Factorial Trailing Zeroes/README.md deleted file mode 100644 index 846e866..0000000 --- a/old(deprecated)/Algorithms/Factorial Trailing Zeroes/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Factorial Trailing Zeroes](https://leetcode.com/problems/factorial-trailing-zeroes/) -###### No:`172` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return {number} - */ -var trailingZeroes = function(n) { - var sum = 0; - var divisor = 5; - while(n >= divisor) { - sum += Math.floor(n / divisor); - divisor *= 5; - } - return sum; -}; -``` - -### How to solve? -Only 2 * 5 can make 0. -4, 6, 8 can represent as 2 * 2, 2 * 3, 2 * 2 * 2. So 2 is more then 5.You need only count the number 5. -5 catains one 5; -25 contains two 5; -125.. - -So count the number 5 is the answer. diff --git a/old(deprecated)/Algorithms/Find All Duplicates in an Array/README.md b/old(deprecated)/Algorithms/Find All Duplicates in an Array/README.md deleted file mode 100644 index e22fd9c..0000000 --- a/old(deprecated)/Algorithms/Find All Duplicates in an Array/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# [Find All Duplicates in an Array](https://leetcode.com/problems/find-all-duplicates-in-an-array/#/description) -###### No:`442` -###### Difficulty:`Medium` - - - -```js -/** - * @param {number[]} nums - * @return {number[]} - */ -var findDuplicates = function(nums) { - var ret = []; - for (var i = 0; i < nums.length; i++) { - var index = Math.abs(nums[i]) - 1; - if (nums[index] < 0) { - ret.push(Math.abs(nums[i])); - } - nums[index] = -Math.abs(nums[index]); - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Find All Numbers Disappeared in an Array/README.md b/old(deprecated)/Algorithms/Find All Numbers Disappeared in an Array/README.md deleted file mode 100644 index d517d7d..0000000 --- a/old(deprecated)/Algorithms/Find All Numbers Disappeared in an Array/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# [Find All Numbers Disappeared in an Array](https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/#/description) -###### No:`448` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} nums - * @return {number[]} - */ -var findDisappearedNumbers = function(nums) { - var map = {}; - var ret = []; - - nums.forEach(function(num) { - map[num] = true; - }); - - for (var i = 1; i <= nums.length; i++) { - if (map[i] === undefined) { - ret.push(i); - } - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Find Bottom Left Tree Value/README.md b/old(deprecated)/Algorithms/Find Bottom Left Tree Value/README.md deleted file mode 100644 index 49fe8c7..0000000 --- a/old(deprecated)/Algorithms/Find Bottom Left Tree Value/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# [Find Bottom Left Tree Value](https://leetcode.com/problems/find-bottom-left-tree-value/#/description) -###### No:`513` -###### Difficulty:`Medium` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ - -var findBottomLeftValue = function(root) { - var maxDepth = Number.MIN_SAFE_INTEGER; - var value; - - var traverse = function(root, depth) { - if (root === null) return; - if (depth > maxDepth) { - value = root.val; - maxDepth = depth; - } - traverse(root.left, depth + 1); - traverse(root.right, depth + 1); - }; - - traverse(root, 1); - return value; -}; - -``` diff --git a/old(deprecated)/Algorithms/Find Largest Value in Each Tree Row/README.md b/old(deprecated)/Algorithms/Find Largest Value in Each Tree Row/README.md deleted file mode 100644 index c3b5104..0000000 --- a/old(deprecated)/Algorithms/Find Largest Value in Each Tree Row/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# [Find Largest Value in Each Tree Row](https://leetcode.com/problems/find-largest-value-in-each-tree-row/#/description) -###### No:`515` -###### Difficulty:`Medium` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ -var largestValues = function(root) { - if (root === null) return []; - var left = largestValues(root.left); - var right = largestValues(root.right); - - var ret = []; - for(var i = 0; i < left.length || i < right.length; i++) { - if (left[i] === undefined) { - ret.push(right[i]); - } else if (right[i] === undefined) { - ret.push(left[i]); - } else { - ret.push(Math.max(right[i], left[i])); - } - } - ret.unshift(root.val); - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Find Mode in Binary Search Tree/README.md b/old(deprecated)/Algorithms/Find Mode in Binary Search Tree/README.md deleted file mode 100644 index 75d4e18..0000000 --- a/old(deprecated)/Algorithms/Find Mode in Binary Search Tree/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# [Find Mode in Binary Search Tree](https://leetcode.com/problems/find-mode-in-binary-search-tree/#/description) -###### No:`501` -###### Difficulty:`Easy` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ - -var traversal = function(root, func) { - if (root === null) { - return null; - } - traversal(root.left, func); - func(root.val); - traversal(root.right, func); -}; - -var findMode = function(root) { - if (root === null) return []; - - var ret; - var maxCount = Number.MIN_VALUE; - var prevValue; - var currentCount; - - traversal(root, function(val) { - if (prevValue === undefined) { - prevValue = val; - currentCount = 1; - } else { - if (prevValue === val) { - currentCount++; - } else { - currentCount = 1; - } - } - - if(currentCount > maxCount) { - ret = []; - ret.push(val); - maxCount = currentCount; - } else if (currentCount === maxCount) { - ret.push(val); - } - prevValue = val; - }); - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Find the Difference/README.md b/old(deprecated)/Algorithms/Find the Difference/README.md deleted file mode 100644 index 9ddd28e..0000000 --- a/old(deprecated)/Algorithms/Find the Difference/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# [Find the Difference](https://leetcode.com/problems/find-the-difference/) -###### No:`389` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @param {string} t - * @return {character} - */ -var findTheDifference = function(s, t) { - if(!s) return t; - var sSum = s.split('').map(i => i.charCodeAt(0)).reduce((p, c) => p + c); - var tSum = t.split('').map(i => i.charCodeAt(0)).reduce((p, c) => p + c); - return String.fromCharCode(tSum - sSum); -}; -``` diff --git a/old(deprecated)/Algorithms/First Bad Version/README.md b/old(deprecated)/Algorithms/First Bad Version/README.md deleted file mode 100644 index 3f7d81d..0000000 --- a/old(deprecated)/Algorithms/First Bad Version/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# [First Bad Version](https://leetcode.com/problems/first-bad-version/#/description) -###### No:`278` -###### Difficulty:`Easy` - - - -```js -/** - * Definition for isBadVersion() - * - * @param {integer} version number - * @return {boolean} whether the version is bad - * isBadVersion = function(version) { - * ... - * }; - */ - -/** - * @param {function} isBadVersion() - * @return {function} - */ -var solution = function(isBadVersion) { - /** - * @param {integer} n Total versions - * @return {integer} The first bad version - */ - return function(n) { - var start = 1; - var end = n; - var middle; - while (start <= end) { - middle = start + Math.floor((end - start) / 2); - if (middle + 1 <= n && !isBadVersion(middle) && isBadVersion(middle + 1)) { - return middle + 1; - } - if (middle - 1 > 0 && !isBadVersion(middle - 1) && isBadVersion(middle)) { - return middle - } - if (middle === 1 && isBadVersion(middle)) { - return middle; - } - if (isBadVersion(middle)) { - end = middle - 1; - } else { - start = middle + 1; - } - } - return 'null'; - }; -}; -``` diff --git a/old(deprecated)/Algorithms/First Unique Character in a String/README.md b/old(deprecated)/Algorithms/First Unique Character in a String/README.md deleted file mode 100644 index 1a1ca53..0000000 --- a/old(deprecated)/Algorithms/First Unique Character in a String/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [First Unique Character in a String](https://leetcode.com/problems/first-unique-character-in-a-string/) -###### No:`387` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @return {number} - */ -var firstUniqChar = function(s) { - var map = {}; - - s.split('').forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - - for(var i = 0; i < s.length; i++) { - if(map[s[i]] === 1) { - return i; - } - } - - return -1; - -}; -``` diff --git a/old(deprecated)/Algorithms/Fizz Buzz/README.md b/old(deprecated)/Algorithms/Fizz Buzz/README.md deleted file mode 100644 index eb00e59..0000000 --- a/old(deprecated)/Algorithms/Fizz Buzz/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# [Fizz Buzz](https://leetcode.com/problems/fizz-buzz/) -###### No:`412` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return {string[]} - */ -var fizzBuzz = function(n) { - var ret = []; - - for (var i = 1; i <= n; i++) { - if (i % 15 === 0) { - ret.push('FizzBuzz'); - } else if (i % 3 === 0) { - ret.push('Fizz'); - } else if (i % 5 === 0) { - ret.push('Buzz'); - } else { - ret.push(i + ''); - } - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Generate Parentheses/README.md b/old(deprecated)/Algorithms/Generate Parentheses/README.md deleted file mode 100644 index 516fd6f..0000000 --- a/old(deprecated)/Algorithms/Generate Parentheses/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [Generate Parentheses](https://leetcode.com/problems/generate-parentheses/) -###### No:`22` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number} n - * @return {string[]} - */ -var generateParenthesis = function(n) { - if(n === 0) { - return []; - } else if(n === 1){ - return ['()']; - } else { - var parenthesis = generateParenthesis(n - 1); - var retObj = {}; - - parenthesis.forEach(p => { - for(var i = 0; i < p.length + 1; i++) { - var charArr = p.split(''); - - charArr.splice(i, 0, '()'); - retObj[charArr.join('')] = true; - } - }); - - return Object.keys(retObj); - } -}; -``` diff --git a/old(deprecated)/Algorithms/Guess Number Higher or Lower/README.md b/old(deprecated)/Algorithms/Guess Number Higher or Lower/README.md deleted file mode 100644 index 0c1ca15..0000000 --- a/old(deprecated)/Algorithms/Guess Number Higher or Lower/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [Guess Number Higher or Lower](https://leetcode.com/problems/guess-number-higher-or-lower/#/description) -###### No:`374` -###### Difficulty:`Easy` - - - -```js -/* The guess API is defined in the parent class GuessGame. - @param num, your guess - @return -1 if my number is lower, 1 if my number is higher, otherwise return 0 - int guess(int num); */ - -public class Solution extends GuessGame { - public int guessNumber(int n) { - int start = 1; - int end = n; - int middle; - - while (start <= end) { - middle = (end - start) / 2 + start; - if (guess(middle) == 0) { - return middle; - } else if (guess(middle) > 0) { - start = middle + 1; - } else { - end = middle - 1; - } - } - return 0; - } -} -``` diff --git a/old(deprecated)/Algorithms/Hamming Distance/README.md b/old(deprecated)/Algorithms/Hamming Distance/README.md deleted file mode 100644 index f0a55a9..0000000 --- a/old(deprecated)/Algorithms/Hamming Distance/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# [Hamming Distance](https://leetcode.com/problems/hamming-distance/#/description) -###### No:`461` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} x - * @param {number} y - * @return {number} - */ - -// Number of 1 Bits -var hammingWeight = function(n) { - var ret = 0; - for(var power = 32; power >= 0; power--) { - var exponent = Math.pow(2, power); - if (n >= exponent) { - ret++; - n -= exponent; - } - } - return ret; -}; - -var hammingDistance = function(x, y) { - return hammingWeight(x ^ y); -}; -``` diff --git a/old(deprecated)/Algorithms/Happy Number/README.md b/old(deprecated)/Algorithms/Happy Number/README.md deleted file mode 100644 index ad2cc7d..0000000 --- a/old(deprecated)/Algorithms/Happy Number/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Happy Number](https://leetcode.com/problems/happy-number/) -###### No:`202` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return {boolean} - */ - -var isHappy = function(n) { - var nums = []; - var ret = n; - - var squire = x => Math.pow(parseInt(x), 2); - var add = (prev, cur) => prev + cur; - while(ret !== 1) { - if(nums.indexOf(ret) > -1) { - return false; - } else { - nums.push(ret); - } - digits = ret.toString().split('').map(squire); - ret = digits.reduce(add); - } - return true; -} -``` diff --git a/old(deprecated)/Algorithms/House Robber/README.md b/old(deprecated)/Algorithms/House Robber/README.md deleted file mode 100644 index f8805d7..0000000 --- a/old(deprecated)/Algorithms/House Robber/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# [House Robber](https://leetcode.com/problems/house-robber/) -###### No:`198` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var rob = function(nums) { - if(nums.length === 0) { - return 0; - } - if(nums.length === 1) { - return nums[0]; - } - - var max = {}; - max[0] = nums[0]; - max[1] = Math.max(nums[0], nums[1]); - for(var i = 2; i < nums.length; i++) { - max[i] = Math.max(max[i - 2] + nums[i], max[i -1]); - } - return max[nums.length - 1]; -}; -``` - -``` -### How to solve? -``` -##### Using DP. -max[0] = nums[0]; -max[1] = Math.max(nums[0], nums[1]); -max[n] = Math.max(max[n] + max[n - 2], max[n -1]); diff --git a/old(deprecated)/Algorithms/Implement Queue using Stacks/README.md b/old(deprecated)/Algorithms/Implement Queue using Stacks/README.md deleted file mode 100644 index f3a0938..0000000 --- a/old(deprecated)/Algorithms/Implement Queue using Stacks/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# [Implement Queue using Stacks](https://leetcode.com/problems/implement-queue-using-stacks/) -###### No:`232` -###### Difficulty:`Easy` - - -```javascript -/** - * @constructor - */ -var Queue = function() { - this.stack1 = []; - this.stack2 =[]; -}; - -/** - * @param {number} x - * @returns {void} - */ -Queue.prototype.push = function(x) { - this.stack1.push(x); -}; - -/** - * @returns {void} - */ -Queue.prototype.pop = function() { - if(this.stack2.length > 0) { - return this.stack2.pop(); - } - if(this.stack1.length > 0) { - while(this.stack1.length > 0) { - this.stack2.push(this.stack1.pop()); - } - return this.stack2.pop(); - } - return null; -}; - -/** - * @returns {number} - */ -Queue.prototype.peek = function() { - if(this.stack2.length > 0) { - return this.stack2[this.stack2.length - 1]; - } - if(this.stack1.length > 0) { - return this.stack1[0]; - } - return null; -}; - -/** - * @returns {boolean} - */ -Queue.prototype.empty = function() { - return this.stack1.length === 0 && this.stack2.length === 0; -}; -``` diff --git a/old(deprecated)/Algorithms/Implement strStr()/README.md b/old(deprecated)/Algorithms/Implement strStr()/README.md deleted file mode 100644 index 9d31c36..0000000 --- a/old(deprecated)/Algorithms/Implement strStr()/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Implement strStr()](https://leetcode.com/problems/implement-strstr) -###### No:`28` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} haystack - * @param {string} needle - * @return {number} - */ - -var strStr = function(haystack, needle) { - if (needle === '') return 0; - for(var i = 0;; i++) { - for(var j = 0;; j++) { - if (j == needle.length) return i; - if (i + j >= haystack.length) return -1; - if (haystack[i + j] != needle[j]) break; - } - } - return -1; -}; - -``` diff --git a/old(deprecated)/Algorithms/Integer Break/README.md b/old(deprecated)/Algorithms/Integer Break/README.md deleted file mode 100644 index 2667c91..0000000 --- a/old(deprecated)/Algorithms/Integer Break/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [Integer Break](https://leetcode.com/problems/integer-break/) -###### No:`343` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number} n - * @return {number} - */ -var integerBreak = function(n) { - var maxArr = { - 1: 1, - 2: 1, - }; - var maxValue = null; - var value = null; - - for(var i = 3; i <= n; i++) { - maxValue = Number.MIN_SAFE_INTEGER; - for(var j = 1; j <= i / 2; j++) { - value = Math.max(j, maxArr[j]) * Math.max(i - j, maxArr[i - j]); - if(value > maxValue) { - maxValue = value; - } - } - maxArr[i] = maxValue; - } - - return maxArr[n]; -}; -``` diff --git a/old(deprecated)/Algorithms/Integer to Roman/README.md b/old(deprecated)/Algorithms/Integer to Roman/README.md deleted file mode 100644 index 9314d53..0000000 --- a/old(deprecated)/Algorithms/Integer to Roman/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# [Integer to Roman](https://leetcode.com/problems/integer-to-roman/) -###### No:`12` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number} num - * @return {string} - */ -var intToRoman = function(num) { - var M = ["", "M", "MM", "MMM"]; - var C = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]; - var X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]; - var I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; - - return [ - M[parseInt(num / 1000)], - C[parseInt((num % 1000) / 100)], - X[parseInt((num % 100) / 10)], - I[num % 10] - ].join(''); -}; -``` diff --git a/old(deprecated)/Algorithms/Intersection of Two Arrays II/README.md b/old(deprecated)/Algorithms/Intersection of Two Arrays II/README.md deleted file mode 100644 index c02ad6b..0000000 --- a/old(deprecated)/Algorithms/Intersection of Two Arrays II/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# [Intersection of Two Arrays II](https://leetcode.com/problems/intersection-of-two-arrays-ii/) -###### No:`350` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums1 - * @param {number[]} nums2 - * @return {number[]} - */ -var intersect = function(nums1, nums2) { - var map = {}; - var ret = []; - - nums1.forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - - nums2.forEach(i => { - if(map[i] !== undefined && map[i] > 0) { - ret.push(i); - map[i]--; - } - }); - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Intersection of Two Arrays/README.md b/old(deprecated)/Algorithms/Intersection of Two Arrays/README.md deleted file mode 100644 index 8d7fb90..0000000 --- a/old(deprecated)/Algorithms/Intersection of Two Arrays/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Intersection of Two Arrays](https://leetcode.com/problems/intersection-of-two-arrays/) -###### No:`349` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums1 - * @param {number[]} nums2 - * @return {number[]} - */ - -var intersection = function (nums1, nums2) { - var ret = []; - for (var i = 0; i < nums1.length; i++) { - for (var j = 0; j < nums2.length; j++) { - if (nums1[i] == nums2[j] && ret.indexOf(nums1[i]) === -1) { - ret.push(nums1[i]); - break; - } - } - } - return ret; -} -``` diff --git a/old(deprecated)/Algorithms/Intersection of Two Linked Lists/README.md b/old(deprecated)/Algorithms/Intersection of Two Linked Lists/README.md deleted file mode 100644 index c2340b3..0000000 --- a/old(deprecated)/Algorithms/Intersection of Two Linked Lists/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# [Intersection of Two Linked Lists](https://leetcode.com/problems/intersection-of-two-linked-lists/) -###### No:`160` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ - -/** - * @param {ListNode} headA - * @param {ListNode} headB - * @return {ListNode} - */ -var getIntersectionNode = function(headA, headB) { - if(headA === null || headB === null) { - return null; - } - var pointA = headA; - var pointB = headB; - var i = 0; - var j = 0; - var k = 0; - while(pointA.next !== null) { - pointA = pointA.next; - i++; - } - while(pointB.next !== null) { - pointB = pointB.next; - j++; - } - if(pointB != pointA) { - return null; - } - pointA = headA; - pointB = headB; - - if(i > j) { - while(k < i - j){pointA = pointA.next;k++;} - } else { - while(k < j - i){pointB = pointB.next;k++;} - } - while(pointA != pointB) { - pointA = pointA.next; - pointB = pointB.next; - } - return pointA; -}; -``` diff --git a/old(deprecated)/Algorithms/Invert Binary Tree/README.md b/old(deprecated)/Algorithms/Invert Binary Tree/README.md deleted file mode 100644 index ba13916..0000000 --- a/old(deprecated)/Algorithms/Invert Binary Tree/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/) -###### No:`226` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {TreeNode} - */ -var invertTree = function(root) { - if(root !== null) { - var tmp; - tmp = root.left; - root.left = root.right; - root.right = tmp; - - invertTree(root.left); - invertTree(root.right); - } - return root; -}; -``` diff --git a/old(deprecated)/Algorithms/Island Perimeter/README.md b/old(deprecated)/Algorithms/Island Perimeter/README.md deleted file mode 100644 index f6317db..0000000 --- a/old(deprecated)/Algorithms/Island Perimeter/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Add Digits](https://leetcode.com/problems/island-perimeter/) -###### No:`463` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[][]} grid - * @return {number} - */ -var islandPerimeter = function(grid) { - var perimeter = 4 * grid.reduce((p, c) => p.concat(c)).reduce((p, c) => p + c); - - for(var i = 0; i < grid.length; i++) { - for(var j = 0; j < grid[i].length; j++) { - if(grid[i][j] === 1) { - if(i + 1 < grid.length && grid[i+1][j] === 1) { - perimeter -= 2 ; - } - if(j + 1 < grid[i].length && grid[i][j+1] === 1) { - perimeter -= 2; - } - } - } - } - - return perimeter; -}; -``` diff --git a/old(deprecated)/Algorithms/Isomorphic Strings/README.md b/old(deprecated)/Algorithms/Isomorphic Strings/README.md deleted file mode 100644 index ebfee03..0000000 --- a/old(deprecated)/Algorithms/Isomorphic Strings/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [Isomorphic Strings](https://leetcode.com/problems/isomorphic-strings/#/description) -###### No:`205` -###### Difficulty:`Easy` - - - -```js -/** - * @param {string} s - * @param {string} t - * @return {boolean} - */ -var isIsomorphic = function(s, t) { - if (s.length !== t.length) return false; - - var smap = {}; - var tmap = {}; - - for (var i = 0; i < s.length; i++) { - if (smap[s[i]] === undefined && tmap[t[i]] === undefined) { - smap[s[i]] = t[i]; - tmap[t[i]] = s[i]; - } - - if (smap[s[i]] !== t[i] || tmap[t[i]] !== s[i] ){ - return false; - } - } - - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/K-diff Pairs in an Array/README.md b/old(deprecated)/Algorithms/K-diff Pairs in an Array/README.md deleted file mode 100644 index f8afdbb..0000000 --- a/old(deprecated)/Algorithms/K-diff Pairs in an Array/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# [K-diff Pairs in an Array](https://leetcode.com/problems/k-diff-pairs-in-an-array/#/description) -###### No:`532` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} nums - * @param {number} k - * @return {number} - */ -var findPairs = function(nums, k) { - if (k < 0 || nums.length === 0) return 0; - var itemCountMap = {}; - var count = 0; - - nums.forEach((item, index) => { - itemCountMap[item] === undefined ? itemCountMap[item] = 1 : itemCountMap[item]++; - }); - - if (k === 0) { - for (var key in itemCountMap) { - if (itemCountMap[key] >= 2) { - count++; - } - } - } else { - for (var key in itemCountMap) { - if (itemCountMap[parseInt(key)+ k] !== undefined) { - count++; - } - } - } - - return count; -}; - -``` diff --git a/old(deprecated)/Algorithms/Keyboard Row/README.md b/old(deprecated)/Algorithms/Keyboard Row/README.md deleted file mode 100644 index d15b890..0000000 --- a/old(deprecated)/Algorithms/Keyboard Row/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# [Keyboard Row](https://leetcode.com/problems/keyboard-row/#/description) -###### No:`500` -###### Difficulty:`Easy` - - - -```js -/** - * @param {string[]} words - * @return {string[]} - */ -var findWords = function(words) { - return words.filter(function(str) { - return /^([qwertyuiop]*|[asdfghjkl]*|[zxcvbnm]*)$/.test(str.toLowerCase()); - }); -}; -``` diff --git a/old(deprecated)/Algorithms/Largest Number/README.md b/old(deprecated)/Algorithms/Largest Number/README.md deleted file mode 100644 index 3c732d5..0000000 --- a/old(deprecated)/Algorithms/Largest Number/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# [Largest Number](https://leetcode.com/problems/largest-number/) -###### No:`179` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[]} nums - * @return {string} - */ -var largestNumber = function(nums) { - var retStr = nums.sort(function(num1, num2) { - var arr1 = num1 + ''.split(); - var arr2 = num2 + ''.split(); - var len1 = arr1.length; - var len2 = arr2.length; - var a, b; - - for (var i = 0; i < len1 || i < len2; i++) { - a = i >= arr1.length ? arr1[i % len1] : arr1[i]; - b = i >= arr2.length ? arr2[i % len2] : arr2[i]; - if (a != b) { - return b - a; - } - } - - // [121,12] 12 > 121; [212,21] 212 > 21 - var isRise; - var checkArr = len1 > len2 ? arr1 : arr2; - for (var j = 0; j < checkArr.length - 1; j++) { - if (checkArr[j] != checkArr[j + 1]) { - if (checkArr[j] > checkArr[j + 1]) { - isRise = false; - break; - } else { - isRise = true; - break; - } - } - } - if (isRise) { - return len1 - len2; - } else { - return len2 - len1; - } - - - }).join(''); - - if (retStr[0] == '0') { - return '0'; - } else { - return retStr; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Length of Last Word/README.md b/old(deprecated)/Algorithms/Length of Last Word/README.md deleted file mode 100644 index 3f99375..0000000 --- a/old(deprecated)/Algorithms/Length of Last Word/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# [Length of Last Word](https://leetcode.com/problems/length-of-last-word/#/description) -###### No:`58` -###### Difficulty:`Easy` -## JavaScript - - -```js -/** - * @param {string} s - * @return {number} - */ -var lengthOfLastWord = function(s) { - return s.trim().split(' ').pop().length; -}; -``` diff --git a/old(deprecated)/Algorithms/Letter Combinations of a Phone Number/README.md b/old(deprecated)/Algorithms/Letter Combinations of a Phone Number/README.md deleted file mode 100644 index e2f2d66..0000000 --- a/old(deprecated)/Algorithms/Letter Combinations of a Phone Number/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# [Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) -###### No:`17` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {string} digits - * @return {string[]} - */ -var letterCombinations = function(digits) { - var map = { - 2: ['a', 'b', 'c'], - 3: ['d', 'e', 'f'], - 4: ['g', 'h', 'i'], - 5: ['j', 'k', 'l'], - 6: ['m', 'n', 'o'], - 7: ['p', 'q', 'r', 's'], - 8: ['t', 'u', 'v'], - 9: ['w', 'x', 'y', 'z'], - }; - - if(digits.length === 0) { - return []; - } else if(digits.length === 1) { - return map[digits]; - } else { - var front = map[digits.slice(0, 1)]; - var back = letterCombinations(digits.slice(1)); - var ret = []; - - front.forEach(f => { - back.forEach(b => { - ret.push(f + b); - }); - }); - - return ret; - } -}; -``` diff --git a/old(deprecated)/Algorithms/License Key Formatting/README.md b/old(deprecated)/Algorithms/License Key Formatting/README.md deleted file mode 100644 index c36281e..0000000 --- a/old(deprecated)/Algorithms/License Key Formatting/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# [License Key Formatting](https://leetcode.com/problems/license-key-formatting/#/description) -###### No:`482` -###### Difficulty:`Medium` - - - -```js -/** - * @param {string} S - * @param {number} K - * @return {string} - */ -var format = function(chars, length, separator) { - if (chars.length <= length) { - return chars.join(''); - } - return format(chars.slice(0, chars.length - length), length, separator) + separator + chars.slice(-length).join(''); -}; -var licenseKeyFormatting = function(S, K) { - var chars = S.split('').filter((char) => { - return char !== '-'; - }); - - return format(chars, K, '-').toUpperCase(); - -}; -``` diff --git a/old(deprecated)/Algorithms/Linked List Cycle/README.md b/old(deprecated)/Algorithms/Linked List Cycle/README.md deleted file mode 100644 index b331cad..0000000 --- a/old(deprecated)/Algorithms/Linked List Cycle/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle/#/description) -###### No:`141` -###### Difficulty:`Easy` - - - -```js -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ - -/** - * @param {ListNode} head - * @return {boolean} - */ -var hasCycle = function(head) { - if (head === null) {return false;} - var fast = head; - var slow = head; - - while(slow.next !== null && slow.next.next !== null) { - fast = fast.next; - slow = slow.next.next; - if (slow === fast) return true; - } - - return false; -}; -``` diff --git a/old(deprecated)/Algorithms/Linked List Random Node/README.md b/old(deprecated)/Algorithms/Linked List Random Node/README.md deleted file mode 100644 index 2258879..0000000 --- a/old(deprecated)/Algorithms/Linked List Random Node/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# [Linked List Random Node](https://leetcode.com/problems/linked-list-random-node/#/description) -###### No:`382` -###### Difficulty:`Medium` - - -```js -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param head The linked list's head. - Note that the head is guaranteed to be not null, so it contains at least one node. - * @param {ListNode} head - */ -var Solution = function(head) { - this.head = head; -}; - -/** - * Returns a random node's value. - * @return {number} - */ -Solution.prototype.getRandom = function() { - var ret = this.head.val; - var p = this.head.next; - var i = 2; - while (p !== null) { - var random = Math.ceil(Math.random() * i); - if (random === 1) { - ret = p.val; - } - i++; - p = p.next; - } - - return ret; -}; - -/** - * Your Solution object will be instantiated and called as such: - * var obj = Object.create(Solution).createNew(head) - * var param_1 = obj.getRandom() - */ -``` diff --git a/old(deprecated)/Algorithms/Longest Common Prefix/README.md b/old(deprecated)/Algorithms/Longest Common Prefix/README.md deleted file mode 100644 index 5816c4b..0000000 --- a/old(deprecated)/Algorithms/Longest Common Prefix/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# [Longest Common Prefix](https://leetcode.com/problems/longest-common-prefix/#/description) -###### No:`14` -###### Difficulty:`Easy` -## JavaScript - - -```js -/** - * @param {string[]} strs - * @return {string} - */ -var longestCommonPrefix = function(strs) { - if (strs.length === 0) return ''; - if (strs.length === 0) return strs[1]; - - var ret = ''; - var isBreak = false; - var isCommon = true; - var char; - - for (var j = 0; j < strs[0].length; j++) { - char = strs[0][j]; - - for (var i = 1; i < strs.length; i++) { - if (strs[i].length <= j || strs[i][j] !== char) { - isBreak = true; - break; - } - } - if (isBreak) { - break; - } - ret += strs[0][j]; - } - return ret; -}; - -``` diff --git a/old(deprecated)/Algorithms/Longest Palindrome/README.md b/old(deprecated)/Algorithms/Longest Palindrome/README.md deleted file mode 100644 index 944cc57..0000000 --- a/old(deprecated)/Algorithms/Longest Palindrome/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# [Longest Palindrome](https://leetcode.com/problems/longest-palindrome/) -###### No:`409` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @return {number} - */ -var longestPalindrome = function(s) { - var map = {}; - var number = 0; - var hasOdd = false; - - s.split('').forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - - for(var i in map) { - if(map[i] % 2 === 0) { - number += map[i]; - } else if(map[i] > 2) { - number += map[i] - 1; - hasOdd = true; - } else { - hasOdd = true; - } - } - - if(hasOdd) number++; - - return number; -}; -``` diff --git a/old(deprecated)/Algorithms/Lowest Common Ancestor of a Binary Search Tree/README.md b/old(deprecated)/Algorithms/Lowest Common Ancestor of a Binary Search Tree/README.md deleted file mode 100644 index 85140b2..0000000 --- a/old(deprecated)/Algorithms/Lowest Common Ancestor of a Binary Search Tree/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# [Lowest Common Ancestor of a Binary Search Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree) -###### No:`235` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {TreeNode} p - * @param {TreeNode} q - * @return {TreeNode} - */ -var lowestCommonAncestor = function(root, p, q) { - var tmp; - if(p > q) { - tmp = p; - p = q; - q = tmp; - } - if(root.val >= p.val && root.val <= q.val) { - return root; - }else if(p.val < root.val & q.val < root.val) { - return lowestCommonAncestor(root.left, p, q); - } else if(p.val > root.val && q.val > root.val){ - return lowestCommonAncestor(root.right, p, q); - } - -}; -``` diff --git a/old(deprecated)/Algorithms/Majority Element/README.md b/old(deprecated)/Algorithms/Majority Element/README.md deleted file mode 100644 index 435c558..0000000 --- a/old(deprecated)/Algorithms/Majority Element/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# [Majority Element](https://leetcode.com/problems/majority-element/) -###### No:`169` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var majorityElement = function(nums) { - var count = 1; - var item = nums[0]; - for(var i = 1; i < nums.length; i++) { - if(count === 0) { - count = 1; - item = nums[i]; - } else { - if(nums[i] == item) { - count++; - } else { - count--; - } - } - } - return item; -}; -``` diff --git a/old(deprecated)/Algorithms/Max Consecutive Ones/README.md b/old(deprecated)/Algorithms/Max Consecutive Ones/README.md deleted file mode 100644 index 3223d8e..0000000 --- a/old(deprecated)/Algorithms/Max Consecutive Ones/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Max Consecutive Ones](https://leetcode.com/problems/max-consecutive-ones/#/description) -###### No:`485` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} nums - * @return {number} - */ -var findMaxConsecutiveOnes = function(nums) { - var max = 0; - var length = 0; - nums.forEach(function(num) { - if (num === 1) length++; - if (num === 0) { - if (length > max) max = length; - length = 0; - } - }); - if (length > max) max = length; - return max; -}; -``` diff --git a/old(deprecated)/Algorithms/Max Points on a Line/README.md b/old(deprecated)/Algorithms/Max Points on a Line/README.md deleted file mode 100644 index 1ec3aa4..0000000 --- a/old(deprecated)/Algorithms/Max Points on a Line/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# [Max Points on a Line](https://leetcode.com/problems/max-points-on-a-line/) -###### No:`149` -###### Difficulty:`Hard` -## CPP - -```cpp -/** - * Definition for a point. - * struct Point { - * int x; - * int y; - * Point() : x(0), y(0) {} - * Point(int a, int b) : x(a), y(b) {} - * }; - */ -class Solution { -public: - int maxPoints(vector &points) { - if(points.size() < 3) { - return points.size(); - } - int maxPoints = 0; //the max point in line - int size = points.size(); - map count; - map::iterator iter; - for(int i = 0; i < size; i++ ) { - int x1 = points[i].x; - int y1 = points[i].y; - int coincideCount = 0; //number of duplicate points - count.clear(); - count[(double)INT_MIN] = 0; - for(int j = i + 1; j < size; j++) { - int x2 = points[j].x; - int y2 = points[j].y; - if(x1 == x2 && y1 == y2) { - coincideCount++; - } else if(x1 == x2){ - count[(double)INT_MIN]++; - } else { - double slope = 1.0*(y1-y2)/(x1-x2); - count[slope]++; - } - } - for(iter = count.begin(); iter != count.end(); iter++) { - if(iter->second + coincideCount > maxPoints) { - maxPoints = iter->second + coincideCount; - } - } - } - maxPoints = maxPoints + 1; - return maxPoints; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Maximum Depth of Binary Tree/README.md b/old(deprecated)/Algorithms/Maximum Depth of Binary Tree/README.md deleted file mode 100644 index 0d240df..0000000 --- a/old(deprecated)/Algorithms/Maximum Depth of Binary Tree/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/) -###### No:`104` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ -var maxDepth = function(root) { - if(root == null) { - return 0; - } else { - return Math.max(maxDepth(root.left), maxDepth(root.right)) +1; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Maximum Subarray/README.md b/old(deprecated)/Algorithms/Maximum Subarray/README.md deleted file mode 100644 index dd4c476..0000000 --- a/old(deprecated)/Algorithms/Maximum Subarray/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Maximum Subarray](https://leetcode.com/problems/maximum-subarray/#/description) -###### No:`53` -###### Difficulty:`Easy` -## JavaScript - - -```js -/** - * @param {number[]} nums - * @return {number} - */ - // https://discuss.leetcode.com/topic/6413/dp-solution-some-thoughts -var maxSubArray = function(nums) { - var max = nums[0]; - var dp = {}; - dp[0] = nums[0]; - - for (var i = 1; i < nums.length; i++) { - dp[i] = dp[i - 1] > 0 ? dp[i - 1] + nums[i] : nums[i]; - max = Math.max(max, dp[i]); - } - - return max; -}; -``` diff --git a/old(deprecated)/Algorithms/Merge Sorted Array/README.md b/old(deprecated)/Algorithms/Merge Sorted Array/README.md deleted file mode 100644 index 7934313..0000000 --- a/old(deprecated)/Algorithms/Merge Sorted Array/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Merge Sorted Array](https://leetcode.com/problems/merge-sorted-array/) -###### No:`88` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums1 - * @param {number} m - * @param {number[]} nums2 - * @param {number} n - * @return {void} Do not return anything, modify nums1 in-place instead. - */ -var merge = function(nums1, m, nums2, n) { - while(n > 0) { - if(m <= 0 || nums1[m - 1] <= nums2[n -1]) { - nums1[m + n - 1] = nums2[n - 1]; - n--; - } else { - nums1[m + n - 1] = nums1[m - 1]; - m--; - } - } -}; -``` diff --git a/old(deprecated)/Algorithms/Merge Two Sorted Lists/README.md b/old(deprecated)/Algorithms/Merge Two Sorted Lists/README.md deleted file mode 100644 index 153d896..0000000 --- a/old(deprecated)/Algorithms/Merge Two Sorted Lists/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/) -###### No:`21` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} l1 - * @param {ListNode} l2 - * @return {ListNode} - */ -var mergeTwoLists = function(l1, l2) { - if(!l1) return l2; - if(!l2) return l1; - var head = null - if(l1.val < l2.val) { - head = l1; - l1 = l1.next; - } else { - head = l2; - l2 = l2.next; - } - - var newlist = head; - - while(l1 && l2) { - if(l1.val < l2.val) { - newlist.next = l1; - l1 = l1.next; - } else { - newlist.next = l2; - l2 = l2.next; - } - newlist = newlist.next; - } - if(!l1) { - newlist.next = l2; - } else { - newlist.next = l1; - } - - return head; -}; -``` diff --git a/old(deprecated)/Algorithms/Min Stack/README.md b/old(deprecated)/Algorithms/Min Stack/README.md deleted file mode 100644 index 4a28b34..0000000 --- a/old(deprecated)/Algorithms/Min Stack/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# [Min Stack](https://leetcode.com/problems/min-stack/) -###### No:`155` -###### Difficulty:`Easy` - - -```javascript -/** - * @constructor - */ -var MinStack = function() { - this.stack = []; - this.min = Number.MAX_SAFE_INTEGER; -}; - -/** - * @param {number} x - * @returns {void} - */ -MinStack.prototype.push = function(x) { - if(x < this.min) { - this.min = x; - } - this.stack.push(x); -}; - -/** - * @returns {void} - */ -MinStack.prototype.pop = function() { - var number = this.stack.pop(); - if(number == this.min) { - this.min = Math.min.apply(null, this.stack); - } -}; - -/** - * @returns {number} - */ -MinStack.prototype.top = function() { - if(this.stack.length > 0) { - return this.stack[this.stack.length - 1]; - } else { - return undefined; - } -}; - -/** - * @returns {number} - */ -MinStack.prototype.getMin = function() { - return this.min; -}; -``` diff --git a/old(deprecated)/Algorithms/Minesweeper/README.md b/old(deprecated)/Algorithms/Minesweeper/README.md deleted file mode 100644 index 399c4a6..0000000 --- a/old(deprecated)/Algorithms/Minesweeper/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# [Minesweeper](https://leetcode.com/problems/minesweeper/#/description) -###### No:`529` -###### Difficulty:`Medium` - - - -```js -/** - * @param {character[][]} board - * @param {number[]} click - * @return {character[][]} - */ -var getMineCount = function(board, point) { - var m = board.length; - var n = board[0].length; - var x = point[0]; - var y = point[1]; - var count = 0; - for (var i = -1; i < 2; i++) { - for (var j = -1; j < 2; j++) { - var p = x + i; - var q = y + j; - if (p < 0 || p >= m || q < 0 || q >= n) continue; - if (board[p][q] === 'M' || board[p][q] === 'X') count++; - } - } - return count; -}; - -var updateBoard = function(board, click) { - var m = board.length; - var n = board[0].length; - var visited = []; - for (var k = 0; k < m; k++) visited.push(new Array(n).fill(false)); - - var queue = []; - queue.push(click); - - while(queue.length > 0) { - var point = queue.shift(); - var x = point[0]; - var y = point[1]; - - if (visited[x][y]) { - continue; - } else { - visited[x][y] = true; - } - - if (board[x][y] === 'M') { - board[x][y] = 'X'; - } else { - var count = getMineCount(board, point); - - if (count === 0) { - board[x][y] = 'B'; - for (var i = -1; i < 2; i++) { - for (var j = -1; j < 2; j++) { - var p = x + i; - var q = y + j; - if (p < 0 || p >= m || q < 0 || q >= n || (p === x && q === y)) continue; - if (board[p][q] === 'E'){ - queue.push([p, q]); - } - } - } - } else { - board[x][y] = count + ''; - } - } - } - - return board; -}; - -``` diff --git a/old(deprecated)/Algorithms/Minimum Absolute Difference in BST/README.md b/old(deprecated)/Algorithms/Minimum Absolute Difference in BST/README.md deleted file mode 100644 index c0260f0..0000000 --- a/old(deprecated)/Algorithms/Minimum Absolute Difference in BST/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# [Minimum Absolute Difference in BST](https://leetcode.com/problems/minimum-absolute-difference-in-bst/#/description) -###### No:`530` -###### Difficulty:`Easy` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ - -var getMinimumDifference = function(root) { - var prev = null; - var min = Number.MAX_VALUE; - var traversal = function(root) { - if (root === null) return; - traversal(root.left); - if (prev !== null && root.val - prev < min) { - min = root.val - prev; - } - prev = root.val; - traversal(root.right); - }; - traversal(root); - - return min; -}; -``` diff --git a/old(deprecated)/Algorithms/Minimum Depth of Binary Tree/README.md b/old(deprecated)/Algorithms/Minimum Depth of Binary Tree/README.md deleted file mode 100644 index 0a3e565..0000000 --- a/old(deprecated)/Algorithms/Minimum Depth of Binary Tree/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# [Minimum Depth of Binary Tree](https://leetcode.com/problems/minimum-depth-of-binary-tree/) -###### No:`111` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ -var minDepth = function(root) { - if(root === null) { - return 0; - } - var leftDepth = minDepth(root.left); - var rightDepth = minDepth(root.right); - - /* - * As a shot, the follow can be write: - * return (leftDepth == 0 || rightDepth == 0) ? leftDepth + rightDepth + 1: Math.min(leftDepth,rightDepth) + 1; - */ - if(leftDepth !== 0 && rightDepth !== 0) { - return Math.min(leftDepth, rightDepth) + 1; - } else if(leftDepth === 0) { - return rightDepth + 1; - } else { - return leftDepth + 1; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Minimum Moves to Equal Array Elements/README.md b/old(deprecated)/Algorithms/Minimum Moves to Equal Array Elements/README.md deleted file mode 100644 index c9e1c47..0000000 --- a/old(deprecated)/Algorithms/Minimum Moves to Equal Array Elements/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# [Minimum Moves to Equal Array Elements](https://leetcode.com/problems/minimum-moves-to-equal-array-elements/#/description) -###### No:`453` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} nums - * @return {number} - */ -var minMoves = function(nums) { - var min = Math.min.apply(null, nums) - - return nums.reduce((p, c) => p + c - min, 0); -}; -``` diff --git a/old(deprecated)/Algorithms/Missing Number/README.md b/old(deprecated)/Algorithms/Missing Number/README.md deleted file mode 100644 index a314aa1..0000000 --- a/old(deprecated)/Algorithms/Missing Number/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# [Missing Number](https://leetcode.com/problems/missing-number/) -###### No:`268` -###### Difficulty:`Medium` - -#### Solution 1 -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var missingNumber = function(nums) { - return (0 + nums.length) * (nums.length + 1) / 2 - nums.reduce((p, c) => p + c, 0); -}; -``` - -#### Solution 2 -Any number XOR itself will be 0. -e.g.[0,1,3] -ret = (0 ^ 1 ^ 3) ^ (0 ^ 1 ^ 2 ^ 3) // will get 2 -```js -/** - * @param {number[]} nums - * @return {number} - */ -var missingNumber = function(nums) { - return nums.reduce((p, c, i) => p ^ c ^ i, 0) ^ nums.length; -}; -``` diff --git a/old(deprecated)/Algorithms/Most Frequent Subtree Sum/README.md b/old(deprecated)/Algorithms/Most Frequent Subtree Sum/README.md deleted file mode 100644 index cff7a2f..0000000 --- a/old(deprecated)/Algorithms/Most Frequent Subtree Sum/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# [Most Frequent Subtree Sum](https://leetcode.com/problems/most-frequent-subtree-sum/#/description) -###### No:`508` -###### Difficulty:`Medium` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number[]} - */ -function getSum (root, map) { - if (root === null) return 0; - var left = getSum(root.left, map); - var right = getSum(root.right, map); - var sum = root.val + left + right; - - map[sum] === undefined ? map[sum] = 1 : map[sum]++; - return sum; -} -var findFrequentTreeSum = function(root) { - if (root === null) return []; - var valueCountMap = {}; - var max = -1; - var ret = []; - var key; - - getSum(root, valueCountMap); - for (key in valueCountMap) { - if (valueCountMap[key] > max) { - max = valueCountMap[key]; - } - } - - for (key in valueCountMap) { - if (valueCountMap[key] === max) { - ret.push(parseInt(key)); - } - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Move Zeroes/README.md b/old(deprecated)/Algorithms/Move Zeroes/README.md deleted file mode 100644 index 6471621..0000000 --- a/old(deprecated)/Algorithms/Move Zeroes/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# [Move Zeroes](https://leetcode.com/problems/move-zeroes/) -###### No:`283` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @return {void} Do not return anything, modify nums in-place instead. - */ -var moveZeroes = function(nums) { - var sum = 0; - for(var i = nums.length - 1; i >=0; i--) { - if(nums[i] === 0) { - nums.splice(i,1); - sum++; - } - } - [].push.apply(nums, new Array(sum).fill(0)) -}; -``` diff --git a/old(deprecated)/Algorithms/Next Greater Element I/README.md b/old(deprecated)/Algorithms/Next Greater Element I/README.md deleted file mode 100644 index adc1c10..0000000 --- a/old(deprecated)/Algorithms/Next Greater Element I/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# [Next Greater Element I](https://leetcode.com/problems/next-greater-element-i/#/description) -###### No:`496` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} findNums - * @param {number[]} nums - * @return {number[]} - */ -var nextGreaterElement = function(findNums, nums) { - var map = {}; - var stack = []; - nums.forEach(function(num) { - while(stack.length > 0 && stack[stack.length - 1] < num) { - map[stack.pop()] = num; - } - stack.push(num); - }); - - return findNums.map(function(num) { - return map[num] || -1; - }); -}; -``` diff --git a/old(deprecated)/Algorithms/Next Greater Element II/README.md b/old(deprecated)/Algorithms/Next Greater Element II/README.md deleted file mode 100644 index a2dbce0..0000000 --- a/old(deprecated)/Algorithms/Next Greater Element II/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# [Next Greater Element II](https://leetcode.com/problems/next-greater-element-ii/#/description) -###### No:`503` -###### Difficulty:`Medium` - - - -```js -/** - * @param {number[]} nums - * @return {number[]} - */ -var nextGreaterElements = function(nums) { - var nextGreaterMap = {}; - var stack = []; - nums.concat(nums).forEach((item) => { - while (stack.length > 0 && stack[stack.length - 1] < item) { - var key = stack.pop(); - if (nextGreaterMap[key] === undefined) { - nextGreaterMap[key] = []; - } - nextGreaterMap[key].push(item); - } - stack.push(item); - }); - - return nums.map((item) => { - if (nextGreaterMap[item] && nextGreaterMap[item].length > 0) { - return nextGreaterMap[item].shift(); - } else { - return -1; - } - }); -}; - -``` diff --git a/old(deprecated)/Algorithms/Next Permutation/README.md b/old(deprecated)/Algorithms/Next Permutation/README.md deleted file mode 100644 index ba0b25d..0000000 --- a/old(deprecated)/Algorithms/Next Permutation/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# [Next Permutation](https://leetcode.com/problems/next-permutation/#/description) -###### No:`31` -###### Difficulty:`Medium` -## JavaScript - - -```js -var nextPermutation = function(nums) { - if (nums.length <= 1) { - return; - } - - var i = nums.length - 2; - var j = nums.length - 1; - while (nums[i] >= nums[i + 1] && i > -1) { - i--; - } - if (i >= 0) { - while (nums[j] <= nums[i]) { - j--; - } - - var temp; - temp = nums[i]; - nums[i] = nums[j]; - nums[j] = temp; - } - - var start = i + 1; - var end = nums.length - 1; - - while (start < end) { - temp = nums[start]; - nums[start] = nums[end]; - nums[end] = temp; - start++; - end--; - } - -}; -``` diff --git a/old(deprecated)/Algorithms/Nim Game/README.md b/old(deprecated)/Algorithms/Nim Game/README.md deleted file mode 100644 index 5428ebb..0000000 --- a/old(deprecated)/Algorithms/Nim Game/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# [Nim Game](https://leetcode.com/problems/nim-game/) -###### No:`292` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return {boolean} - */ -var canWinNim = function(n) { - return !(n !== 0 && n%4 === 0); -}; -``` diff --git a/old(deprecated)/Algorithms/Nth Digit/README.md b/old(deprecated)/Algorithms/Nth Digit/README.md deleted file mode 100644 index 9a62d82..0000000 --- a/old(deprecated)/Algorithms/Nth Digit/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# [Nth Digit](https://leetcode.com/problems/nth-digit/#/description) -###### No:`400` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} n - * @return {number} - */ -var findNthDigit = function(n) { - var length = 1; - var count = 9; - var digits = 9; - - while (n > digits) { - length++; - count *= 10; - digits += length * count; - } - n = n - (digits - length * count); - - var position = Math.ceil(n / length); - var number = Math.pow(10, (length - 1)) + position - 1; - - if (n % length === 0) { - return number % 10; - } else { - return parseInt(String(number)[n % length - 1]); - } -}; - -``` diff --git a/old(deprecated)/Algorithms/Number Complement/README.md b/old(deprecated)/Algorithms/Number Complement/README.md deleted file mode 100644 index 10fa230..0000000 --- a/old(deprecated)/Algorithms/Number Complement/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# [Number Complement](https://leetcode.com/problems/number-complement/#/description) -###### No:`476` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} num - * @return {number} - -这道题给了我们一个数,让我们求补数。通过分析题目汇总的例子,我们知道需要做的就是每个位翻转一下就行了,但是翻转的起始位置上从最高位的1开始的,前面的0是不能被翻转的,所以我们从高往低遍历,如果遇到第一个1了后,我们的flag就赋值为true,然后就可以进行翻转了,翻转的方法就是对应位异或一个1即可,参见代码如下: - - - -解法一: - -复制代码 -class Solution { -public: - int findComplement(int num) { - bool start = false; - for (int i = 31; i >= 0; --i) { - if (num & (1 << i)) start = true; - if (start) num ^= (1 << i); - } - return num; - } -}; -复制代码 - - -由于位操作里面的取反符号~本身就可以翻转位,但是如果直接对num取反的话就是每一位都翻转了,而最高位1之前的0是不能翻转的,所以我们只要用一个mask来标记最高位1前面的所有0的位置,然后对mask取反后,与上对num取反的结果即可,参见代码如下: - - - -解法二: - -复制代码 -class Solution { -public: - int findComplement(int num) { - int mask = INT_MAX; - while (mask & num) mask <<= 1; - return ~mask & ~num; - } -}; -复制代码 - - -再来看一种迭代的写法,一行搞定碉堡了,思路就是每次都右移一位,并根据最低位的值先进行翻转,如果当前值小于等于1了,就不用再调用递归函数了,参见代码如下: - - - -解法三: - -class Solution { -public: - int findComplement(int num) { - return (1 - num % 2) + 2 * (num <= 1 ? 0 : findComplement(num / 2)); - } -}; - - */ - -var findComplement = function(num) { - var mask = ~0; - while (mask & num) mask <<= 1; - return ~mask & ~num; -}; -``` diff --git a/old(deprecated)/Algorithms/Number of 1 Bits/README.md b/old(deprecated)/Algorithms/Number of 1 Bits/README.md deleted file mode 100644 index dc6cfc9..0000000 --- a/old(deprecated)/Algorithms/Number of 1 Bits/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# [Number of 1 Bits](https://leetcode.com/problems/number-of-1-bits/) -###### No:`191` -###### Difficulty:`Easy` -#### Solution 1 -```js -/** - * @param {number} n - a positive integer - * @return {number} - */ -var hammingWeight = function(n) { - var count = 0; - while (n) { - n = n & (n - 1); - count++; - } - - return count; -}; -``` -#### Solution 2 -```javascript -/** - * @param {number} n - a positive integer - * @return {number} - */ -var hammingWeight = function(n) { - var ret = 0; - const base = 2; - const bitnum = 32; - var power = bitnum -1; - - for(var i = 0; i < bitnum; i++) { - if(n >= Math.pow(base, power)) { - ret++; - n -= Math.pow(base, power); - } - power--; - } - - return ret; -}; - -``` diff --git a/old(deprecated)/Algorithms/Number of Boomerangs/README.md b/old(deprecated)/Algorithms/Number of Boomerangs/README.md deleted file mode 100644 index 9c21791..0000000 --- a/old(deprecated)/Algorithms/Number of Boomerangs/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# [Number of Boomerangs](https://leetcode.com/problems/number-of-boomerangs/) -###### No:`447` -###### Difficulty:`Easy` - - -### Solution: -Get each 2 points' distance. For one point, save the distance as the key and count as the value into a map. The Boomerangs which contains this point will be count * (count - 1). - -```javascript -/** - * @param {number[][]} points - * @return {number} - */ - -var getDistance = function(a, b) { - var dx = a[0] - b[0]; - var dy = a[1] - b[1]; - - return dx * dx + dy * dy; -} - -var numberOfBoomerangs = function(points) { - var map; - var distance; - var ret = 0; - - for(var i = 0; i < points.length; i++) { - map = {}; - for(var j = 0; j < points.length; j++) { - if(i !== j) { - distance = getDistance(points[i], points[j]); - map[distance] === undefined ? map[distance] = 1 : map[distance] += 1; - } - } - - for(var d in map) { - ret += map[d] * (map[d] - 1); - } - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Number of Segments in a String/README.md b/old(deprecated)/Algorithms/Number of Segments in a String/README.md deleted file mode 100644 index 036be85..0000000 --- a/old(deprecated)/Algorithms/Number of Segments in a String/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# [Number of Segments in a String](https://leetcode.com/problems/number-of-segments-in-a-string/#/description) -###### No:`434` -###### Difficulty:`Easy` - - - -```js -/** - * @param {string} s - * @return {number} - */ -/* -var countSegments = function(s) { - return s.split(' ').filter((item) => item !== '').length; -}; -*/ - -var countSegments = function(s) { - var count = 0; - for (var i = 0; i < s.length; i++) { - if (s[i] !== ' ' && (i === 0 || s[i - 1] === ' ')) count++; - } - - return count; -}; -``` diff --git a/old(deprecated)/Algorithms/Odd Even Linked List/README.md b/old(deprecated)/Algorithms/Odd Even Linked List/README.md deleted file mode 100644 index 3cc9445..0000000 --- a/old(deprecated)/Algorithms/Odd Even Linked List/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# [Odd Even Linked List](https://leetcode.com/problems/odd-even-linked-list/) -###### No:`328` -###### Difficulty:`Medium` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var oddEvenList = function(head) { - if(head === null) { - return null; - } - var second = head.next; - - var odd = head; - var even = head.next; - while(odd && odd.next && odd.next.next) { - odd.next = even.next; - odd = odd.next; - if(odd) { - even.next = odd.next; - even = even.next; - } - } - odd.next = second; - return head; -}; -``` diff --git a/old(deprecated)/Algorithms/Output Contest Matches/README.md b/old(deprecated)/Algorithms/Output Contest Matches/README.md deleted file mode 100644 index 0168e02..0000000 --- a/old(deprecated)/Algorithms/Output Contest Matches/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# [Output Contest Matches](https://leetcode.com/problems/output-contest-matches/) -###### No:`544` -###### Difficulty:`Medium` - - -### LeetCode Weekly Contest 24 -### 544. Output Contest Matches -During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, like make the rank 1 team play with the rank nth team, which is a good strategy to make the contest more interesting. Now, you're given n teams, you need to output their final contest matches in the form of a string. - -The n teams are given in the form of positive integers from 1 to n, which represents their initial rank. (Rank 1 is the strongest team and Rank n is the weakest team.) We'll use parentheses('(', ')') and commas(',') to represent the contest team pairing - parentheses('(' , ')') for pairing and commas(',') for partition. During the pairing process in each round, you always need to follow the strategy of making the rather strong one pair with the rather weak one. - -#### Example -``` -Input: 2 -Output: (1,2) -Input: 4 -Output: ((1,4),(2,3)) -Input: 8 -Output: (((1,8),(4,5)),((2,7),(3,6))) -``` - -#### Solution -```js -/** - * @param {number} n - * @return {string} - */ -function getMatch (match) { - if (match.length === 1) return match; - var ret = []; - var start = 0; - var end = match.length - 1; - var value; - - while (start < end) { - value = `(${match[start]},${match[end]})`; - ret.push(value); - start++; - end--; - } - - return getMatch(ret); -} -var findContestMatch = function(n) { - var match = []; - for (var i = 1; i <= n; i++) match.push(i); - - return getMatch(match)[0]; -}; -``` diff --git a/old(deprecated)/Algorithms/Palindrome Linked List/README.md b/old(deprecated)/Algorithms/Palindrome Linked List/README.md deleted file mode 100644 index 47adfe3..0000000 --- a/old(deprecated)/Algorithms/Palindrome Linked List/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# [Palindrome Linked List](https://leetcode.com/problems/palindrome-linked-list/) -###### No:`234` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {boolean} - */ -var isPalindrome = function(head) { - function reverseList(head) { - if(!head) { - return head; - } - var prev = null; - var next = null; - while(head) { - next = head.next; - head.next = prev; - prev = head; - head = next; - } - return prev; - } - if(!head || !head.next ) { - return true; - } - var slow = head; - var fast = head; - while(fast && fast.next && fast.next.next) { - slow = slow.next; - fast = fast.next.next; - } - - slow.next = reverseList(slow.next); - slow = slow.next; - - while(slow) { - if(head.val !== slow.val) { - return false; - } - head = head.next; - slow = slow.next; - } - - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/Palindrome Number/README.md b/old(deprecated)/Algorithms/Palindrome Number/README.md deleted file mode 100644 index ea0aae2..0000000 --- a/old(deprecated)/Algorithms/Palindrome Number/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# [Palindrome Number](https://leetcode.com/problems/palindrome-number/) -###### No:`9` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} x - * @return {boolean} - */ -var isPalindrome = function(x) { - x += ''; - var i = 0; - var j = x.length - 1; - while(i < j) { - if(x[i] != x[j]) { - return false - } - i++; - j--; - } - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/Pascal's Triangle II/README.md b/old(deprecated)/Algorithms/Pascal's Triangle II/README.md deleted file mode 100644 index f89764b..0000000 --- a/old(deprecated)/Algorithms/Pascal's Triangle II/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# [Pascal's Triangle II](https://leetcode.com/problems/pascals-triangle-ii/) -###### No:`119` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} rowIndex - * @return {number[]} - */ -var getRow = function(rowIndex) { - var ret = []; - ret[0] = 1; - for(var i = 1; i <= rowIndex; i++ ) { - ret[i] = 1; - for(j = i - 1; j > 0; j--) { - ret[j] = ret[j] + ret[j - 1]; - } - } - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Pascal's Triangle/README.md b/old(deprecated)/Algorithms/Pascal's Triangle/README.md deleted file mode 100644 index 964c1e9..0000000 --- a/old(deprecated)/Algorithms/Pascal's Triangle/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# [Pascal's Triangle](https://leetcode.com/problems/pascals-triangle/) -###### No:`118` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} numRows - * @return {number[][]} - */ -var generate = function(numRows) { - if(numRows === 0) { - return []; - } - if(numRows === 1) { - return [[1]]; - } - - var ret = [[1]]; - for(var i = 1; i < numRows; i++) { - ret.push([]); - for(var j = 0; j < ret[i - 1].length - 1; j++) { - ret[i].push(ret[i-1][j] + ret[i-1][j + 1]); - } - ret[i].unshift(1); - ret[i].push(1); - } - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Path Sum III/README.md b/old(deprecated)/Algorithms/Path Sum III/README.md deleted file mode 100644 index 55eaac5..0000000 --- a/old(deprecated)/Algorithms/Path Sum III/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# [Path Sum III](https://leetcode.com/problems/path-sum-iii/#/description) -###### No:`437` -###### Difficulty:`Easy` - - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {number} sum - * @return {number} - */ -var traversal = function(root, list, sum, cb) { - if (root === null) return; - cb(list, root.val); - var newList = list.map((item) => item - root.val).concat(sum); - - traversal(root.left, newList, sum, cb); - traversal(root.right, newList, sum, cb); -}; -var pathSum = function(root, sum) { - var count = 0; - var cb = function (list, val) { - list.forEach((item) => { - if (item === val) { - count++; - } - }); - } - - traversal(root, [sum], sum, cb); - return count; -}; - -``` diff --git a/old(deprecated)/Algorithms/Path Sum/README.md b/old(deprecated)/Algorithms/Path Sum/README.md deleted file mode 100644 index 7bec17f..0000000 --- a/old(deprecated)/Algorithms/Path Sum/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [Path Sum](https://leetcode.com/problems/path-sum/) -###### No:`112` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @param {number} sum - * @return {boolean} - */ -var hasPathSum = function(root, sum) { - if(root == null) { - return false; - } - if(root.left == null && root.right == null && sum == root.val) { - return true; - } - if(hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val)) { - return true; - } else { - return false; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Permutations/README.md b/old(deprecated)/Algorithms/Permutations/README.md deleted file mode 100644 index 8796ab8..0000000 --- a/old(deprecated)/Algorithms/Permutations/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [Permutations](https://leetcode.com/problems/permutations/) -###### No:`46` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[]} nums - * @return {number[][]} - */ -var permute = function(nums) { - var ret = []; - if(nums.length == 1) { - ret.push(nums); - return ret; - } - - var item, item_copy; - var head = nums.shift(); - var pre_ret = permute(nums); - - for(var i = 0; i < pre_ret.length; i++ ) { - item = pre_ret[i]; - for(var j = 0; j <= item.length; j++) { - item_copy = [].slice.call(item); - item_copy.splice(j, 0, head); - ret.push(item_copy); - } - } - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Plus One/README.md b/old(deprecated)/Algorithms/Plus One/README.md deleted file mode 100644 index a3343fb..0000000 --- a/old(deprecated)/Algorithms/Plus One/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Plus One](https://leetcode.com/problems/plus-one/) -###### No:`66` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} digits - * @return {number[]} - */ -var plusOne = function(digits) { - digits.unshift(0); - var tail = digits.length - 1; - digits[tail]++; - while(tail > 0) { - if(digits[tail] == 10) { - digits[tail] = 0; - tail--; - digits[tail]++; - } else { - tail--; - } - } - if(digits[0] == 0) { - digits.shift(); - } - return digits; -}; -``` diff --git a/old(deprecated)/Algorithms/Power of Four/README.md b/old(deprecated)/Algorithms/Power of Four/README.md deleted file mode 100644 index dc9c210..0000000 --- a/old(deprecated)/Algorithms/Power of Four/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# [Power of Four](https://leetcode.com/problems/power-of-four/#/description) -###### No:`342` -###### Difficulty:`Easy` - - - -```js -var isPowerOfFour = function(num) { - if (num < 1) { - return false; - } else if (num === 1) { - return true; - } else if (num % 4 !== 0) { - return false; - } else { - return isPowerOfFour(num / 4); - } -}; -``` -```js -var isPowerOfFour = function(num) { - return num > 0 && (num & (num - 1)) === 0 && (num & 0x55555555) !== 0; -}; -``` diff --git a/old(deprecated)/Algorithms/Power of Three/README.md b/old(deprecated)/Algorithms/Power of Three/README.md deleted file mode 100644 index dc607a5..0000000 --- a/old(deprecated)/Algorithms/Power of Three/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# [Power of Three](https://leetcode.com/problems/power-of-three/) -###### No:`326` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return {boolean} - */ -var isPowerOfThree = function(n) { - while(true) { - if(n === 1) { - return true; - } - if(n === 0 || n === 2) { - return false; - } - if(n % 3 !== 0) { - return false; - } else { - n = n / 3; - } - } - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/Power of Two/README.md b/old(deprecated)/Algorithms/Power of Two/README.md deleted file mode 100644 index 632ea69..0000000 --- a/old(deprecated)/Algorithms/Power of Two/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# [Power of Two](https://leetcode.com/problems/power-of-two/) -###### No:`231` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} n - * @return {boolean} - */ -var isPowerOfTwo = function(n) { - if(n === 0) return false; - while(n !== 1) { - if(n % 2 === 0) { - n = n / 2; - } else { - return false; - } - } - return true; -}; -``` - diff --git a/old(deprecated)/Algorithms/Product of Array Except Self/README.md b/old(deprecated)/Algorithms/Product of Array Except Self/README.md deleted file mode 100644 index b7a3ae9..0000000 --- a/old(deprecated)/Algorithms/Product of Array Except Self/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# [Product of Array Except Self](https://leetcode.com/problems/product-of-array-except-self/) -###### No:`238` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[]} nums - * @return {number[]} - */ -var productExceptSelf = function(nums) { - var zeroCount = 0; - var products = nums - .filter((num) => { - if(num === 0) zeroCount++; - return num !== 0; - }) - .reduce((prev, curr) => prev * curr, 1); - return nums.map((num) => { - if(zeroCount >= 2) { - return 0; - } - if(zeroCount === 1) { - return num === 0 ? products : 0; - } - return products / num; - - }); -}; -``` diff --git a/old(deprecated)/Algorithms/Queue Reconstruction by Height/README.md b/old(deprecated)/Algorithms/Queue Reconstruction by Height/README.md deleted file mode 100644 index a04efa9..0000000 --- a/old(deprecated)/Algorithms/Queue Reconstruction by Height/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# [Queue Reconstruction by Height](https://leetcode.com/problems/queue-reconstruction-by-height/#/description) -###### No:`406` -###### Difficulty:`Medium` - - - -```js -/** - * @param {number[][]} people - * @return {number[][]} - */ -var reconstructQueue = function(people) { - if (people.length <= 1) return people; - people.sort((a, b) => { - if (a[0] !== b[0]) { - return b[0] - a[0]; - } else { - return a[1] - b[1]; - } - }); - - var ret = []; - ret.push(people[0]); - - for (var i = 1; i < people.length; i++) { - if (people[i][0] === people[0][0]) { - ret.push(people[i]); - continue; - } - - var count = 0, index = 0; - while (count < people[i][1]) { - if (ret[index][0] >= people[i][0]) count++; - index++; - } - ret.splice(index, 0, people[i]); - } - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Ransom Note/README.md b/old(deprecated)/Algorithms/Ransom Note/README.md deleted file mode 100644 index 6fee5f3..0000000 --- a/old(deprecated)/Algorithms/Ransom Note/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# [Ransom Note](https://leetcode.com/problems/ransom-note/) -###### No:`383` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} ransomNote - * @param {string} magazine - * @return {boolean} - */ -var canConstruct = function(ransomNote, magazine) { - var map = {}; - var flag = true; - - magazine.split('').forEach(i => map[i] === undefined ? map[i] = 1 : map[i]++); - ransomNote.split('').forEach(i => { - if(map[i] === undefined || map[i] === 0) { - flag = false; - } else { - map[i]--; - } - }); - - return flag; -}; -``` diff --git a/old(deprecated)/Algorithms/Rectangle Area/README.md b/old(deprecated)/Algorithms/Rectangle Area/README.md deleted file mode 100644 index 18f17be..0000000 --- a/old(deprecated)/Algorithms/Rectangle Area/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# [Rectangle Area](https://leetcode.com/problems/rectangle-area/) -###### No:`223` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} A - * @param {number} B - * @param {number} C - * @param {number} D - * @param {number} E - * @param {number} F - * @param {number} G - * @param {number} H - * @return {number} - */ -var computeArea = function(A, B, C, D, E, F, G, H) { - var areaA = (C-A) * (D-B); - var areaB = (G-E) * (H-F); - - var left = Math.max(A, E); - var right = Math.min(G, C); - var bottom = Math.max(F, B); - var top = Math.min(D, H); - - var overlap = 0; - - if(right > left && top > bottom) { - overlap = (right - left) * (top - bottom); - } - return areaA + areaB - overlap; -}; -``` diff --git a/old(deprecated)/Algorithms/Relative Ranks/README.md b/old(deprecated)/Algorithms/Relative Ranks/README.md deleted file mode 100644 index 74e6188..0000000 --- a/old(deprecated)/Algorithms/Relative Ranks/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# [Relative Ranks](https://leetcode.com/problems/relative-ranks/#/description) -###### No:`506` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} nums - * @return {string[]} - */ -var findRelativeRanks = function(nums) { - var rank = 4; - var map = {}; - var sortNums = [].slice.call(nums).sort((a, b) => b - a); - for (var i = 0; i < sortNums.length; i++) { - if (i === 0) { - map[sortNums[i]] = 'Gold Medal'; - } else if (i === 1) { - map[sortNums[i]] = 'Silver Medal'; - } else if (i === 2) { - map[sortNums[i]] = 'Bronze Medal'; - } else { - map[sortNums[i]] = String(rank); - rank++; - } - } - - return nums.map((score) => { - return map[score]; - }); -}; -``` diff --git a/old(deprecated)/Algorithms/Remove Duplicates from Sorted Array/README.md b/old(deprecated)/Algorithms/Remove Duplicates from Sorted Array/README.md deleted file mode 100644 index 89ece2f..0000000 --- a/old(deprecated)/Algorithms/Remove Duplicates from Sorted Array/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Remove Duplicates from Sorted Array](https://leetcode.com/problems/remove-duplicates-from-sorted-array/) -###### No:`26` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var removeDuplicates = function(nums) { - var i = 0; - var j = 0; - while(j < nums.length) { - if(nums[i] == nums[j]) { - j++; - } else { - i++; - nums[i] = nums[j]; - j++; - } - } - return i + 1; -}; -``` diff --git a/old(deprecated)/Algorithms/Remove Duplicates from Sorted List/README.md b/old(deprecated)/Algorithms/Remove Duplicates from Sorted List/README.md deleted file mode 100644 index dc0b19a..0000000 --- a/old(deprecated)/Algorithms/Remove Duplicates from Sorted List/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Remove Duplicates from Sorted List](https://leetcode.com/problems/remove-duplicates-from-sorted-list/) -###### No:`83` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var deleteDuplicates = function(head) { - var iter = head; - while(iter) { - if(iter.next && iter.val === iter.next.val) { - iter.next = iter.next.next; - } else { - iter = iter.next; - } - } - return head; -}; -``` diff --git a/old(deprecated)/Algorithms/Remove Element/README.md b/old(deprecated)/Algorithms/Remove Element/README.md deleted file mode 100644 index f5bf0ef..0000000 --- a/old(deprecated)/Algorithms/Remove Element/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# [Remove Element](https://leetcode.com/problems/remove-element/) -###### No:`27` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @param {number} val - * @return {number} - */ -var removeElement = function(nums, val) { - var head = 0; - var tail = nums.length - 1; - while(head <= tail) { - if(nums[head] != val) { - head++; - continue; - } - - if(nums[tail] == val) { - tail--; - continue; - } - - nums[head] = nums[tail]; - tail--; - } - return head; -}; -``` diff --git a/old(deprecated)/Algorithms/Remove Linked List Elements/README.md b/old(deprecated)/Algorithms/Remove Linked List Elements/README.md deleted file mode 100644 index 773160c..0000000 --- a/old(deprecated)/Algorithms/Remove Linked List Elements/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# [Remove Linked List Elements](https://leetcode.com/problems/remove-linked-list-elements/) -###### No:`203` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @param {number} val - * @return {ListNode} - */ -var removeElements = function(head, val) { - while(head && head.val == val) { - head = head.next; - } - - if(!head) { - return head; - } - - var prev = head; - var iter = head.next; - - while(iter) { - if(iter.val == val) { - prev.next = iter.next; - } else { - prev = iter; - } - iter = iter.next; - } - - return head; -}; -``` diff --git a/old(deprecated)/Algorithms/Remove Nth Node From End of List/README.md b/old(deprecated)/Algorithms/Remove Nth Node From End of List/README.md deleted file mode 100644 index f014c26..0000000 --- a/old(deprecated)/Algorithms/Remove Nth Node From End of List/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# [Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) -###### No:`19` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @param {number} n - * @return {ListNode} - */ -var removeNthFromEnd = function(head, n) { - var front = head; - var end = head; - for(var i = 0; i <= n && front; i++) { - front = front.next; - } - - // delete first node - if(i < n + 1) { - return head.next; - } - - while(front) { - front = front.next; - end = end.next; - } - end.next = end.next.next; - return head; -}; -``` diff --git a/old(deprecated)/Algorithms/Repeated Substring Pattern/README.md b/old(deprecated)/Algorithms/Repeated Substring Pattern/README.md deleted file mode 100644 index 34805d9..0000000 --- a/old(deprecated)/Algorithms/Repeated Substring Pattern/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# [Repeated Substring Pattern](https://leetcode.com/problems/repeated-substring-pattern/#/description) -###### No:`459` -###### Difficulty:`Easy` - - - -```js -/** - * @param {string} s - * @return {boolean} - */ -/* -var repeatedSubstringPattern = function(s) { - if (s.length === 1) return false; - var ret = false; - - for (var i = 1; i <= parseInt((s.length + 1) / 2); i++) { - for (var j = i; j < s.length; j++) { - if (s[j % i] !== s[j]) break; - } - if (j === s.length && (j - 1) % i === i - 1) { - ret = true; - break; - } - } - - return ret; -}; -*/ - -var repeatedSubstringPattern = function(s) { - return /^(.+)\1+$/.test(s); -} -``` diff --git a/old(deprecated)/Algorithms/Reverse Integer/README.md b/old(deprecated)/Algorithms/Reverse Integer/README.md deleted file mode 100644 index 9626fc5..0000000 --- a/old(deprecated)/Algorithms/Reverse Integer/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# [Reverse Integer](https://leetcode.com/problems/reverse-integer/) -###### No:`7` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} x - * @return {number} - */ -var reverse = function(x) { - var flag = (x < 0 ? true : false); - x = Math.abs(x); - var reverse = parseInt((x + '').split('').reverse().join(''), 10); - if(reverse > Math.pow(2, 31)) { - return 0; - } - if(flag) { - return 0 - reverse; - } else { - return reverse; - } -}; -``` -###### PS: -Did you notice that the reversed integer might overflow? Assume the input is a 32-bit integer, then the reverse of 1000000003 overflows. How should you handle such cases? -For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows. diff --git a/old(deprecated)/Algorithms/Reverse Linked List II/README.md b/old(deprecated)/Algorithms/Reverse Linked List II/README.md deleted file mode 100644 index c11dd06..0000000 --- a/old(deprecated)/Algorithms/Reverse Linked List II/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# [Reverse Linked List II](https://leetcode.com/problems/reverse-linked-list-ii/) -###### No:`92` -###### Difficulty:`Medium` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @param {number} m - * @param {number} n - * @return {ListNode} - */ - -var reverseBetween = function(head, m, n) { - function reverseList(head) { - if(!head) { - return head; - } - var prev = null; - var next = null; - while(head) { - next = head.next; - head.next = prev; - prev = head; - head = next; - } - return prev; - } - if(m === n) { - return head; - } - var middleLeft = null; - var middleRight = null; - var left = null; - var right = null; - - var i = 1; - var point = head; - while(point) { - if(i + 1 === m) { - left = point; - } - if(i === m) { - middleLeft = point; - } - if(i === n) { - middleRight = point; - } - if(i === n + 1) { - right = point; - } - i++; - point = point.next; - } - if(left) { - left.next = null; - } - - middleRight.next = null; - reverseList(middleLeft); - middleLeft.next = right; - - if(left) { - left.next = middleRight; - return head; - } else { - return middleRight; - } -}; - -``` diff --git a/old(deprecated)/Algorithms/Reverse Linked List/README.md b/old(deprecated)/Algorithms/Reverse Linked List/README.md deleted file mode 100644 index 1a9aec0..0000000 --- a/old(deprecated)/Algorithms/Reverse Linked List/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) -###### No:`206` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var reverseList = function(head) { - if(!head) { - return head; - } - var prev = null; - var next = null; - while(head) { - next = head.next; - head.next = prev; - prev = head; - head = next; - } - return prev; -}; -``` diff --git a/old(deprecated)/Algorithms/Reverse String/README.md b/old(deprecated)/Algorithms/Reverse String/README.md deleted file mode 100644 index 2959562..0000000 --- a/old(deprecated)/Algorithms/Reverse String/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# [Reverse String](https://leetcode.com/problems/reverse-string/) -###### No:`344` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @return {string} - */ -var reverseString = function(s) { - return s.split('').reverse().join(''); -}; -``` diff --git a/old(deprecated)/Algorithms/Reverse Vowels of a String/README.md b/old(deprecated)/Algorithms/Reverse Vowels of a String/README.md deleted file mode 100644 index 4fbf546..0000000 --- a/old(deprecated)/Algorithms/Reverse Vowels of a String/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Reverse Vowels of a String](https://leetcode.com/problems/reverse-vowels-of-a-string/#/description) -###### No:`345` -###### Difficulty:`Easy` - - - -```js -/** - * @param {string} s - * @return {string} - */ -var reverseVowels = function(s) { - s = s.split(''); - var vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']; - var start = -1; - var end = s.length; - var temp; - - while (start < end) { - while (start < end && vowels.indexOf(s[++start]) === -1); - while (start < end && vowels.indexOf(s[--end]) === -1); - temp = s[start]; - s[start] = s[end]; - s[end] = temp; - } - - return s.join(''); -}; -``` diff --git a/old(deprecated)/Algorithms/Reverse Words in a String/README.md b/old(deprecated)/Algorithms/Reverse Words in a String/README.md deleted file mode 100644 index 1b565f4..0000000 --- a/old(deprecated)/Algorithms/Reverse Words in a String/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# [Reverse Words in a String](https://leetcode.com/problems/reverse-words-in-a-string/) -###### No:`151` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} str - * @returns {string} - */ -var reverseWords = function(str) { - return str.split(' ').reverse().filter(function(item) { - return '' != item; - }).join(' ').trim(); -}; - -``` diff --git a/old(deprecated)/Algorithms/Roman to Integer/README.md b/old(deprecated)/Algorithms/Roman to Integer/README.md deleted file mode 100644 index af02a17..0000000 --- a/old(deprecated)/Algorithms/Roman to Integer/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# [Roman to Integer](https://leetcode.com/problems/roman-to-integer/) -###### No:`13` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @return {number} - * - * Symbol Value - * I 1 - * V 5 - * X 10 - * L 50 - * C 100 - * D 500 - * M 1,000 - - */ -var romanToInt = function(s) { - var map = { - 'I':1, - 'V':5, - 'X':10, - 'L':50, - 'C':100, - 'D':500, - 'M':1000 - }; - - var sum = 0; - var right = 'I'; - - for(var i = s.length - 1; i >=0; i--) { - if(i < s.length - 1) { - right = s[i + 1]; - } - if(map[s[i]] < map[right]) { - sum -= map[s[i]]; - } else { - sum += map[s[i]]; - right = s[i]; - } - } - return sum; -}; - -``` diff --git a/old(deprecated)/Algorithms/Rotate Array/README.md b/old(deprecated)/Algorithms/Rotate Array/README.md deleted file mode 100644 index 939d490..0000000 --- a/old(deprecated)/Algorithms/Rotate Array/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# [Rotate Array](https://leetcode.com/problems/rotate-array/) -###### No:`189` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @param {number} k - * @return {void} Do not return anything, modify nums in-place instead. - */ -var rotate = function(nums, k) { - for(var i = 0; i < k; i++) { - nums.unshift(nums.pop()); - } -}; -``` diff --git a/old(deprecated)/Algorithms/Same Tree/README.md b/old(deprecated)/Algorithms/Same Tree/README.md deleted file mode 100644 index 44d45d5..0000000 --- a/old(deprecated)/Algorithms/Same Tree/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Same Tree](https://leetcode.com/problems/same-tree/) -###### No:`100` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} p - * @param {TreeNode} q - * @return {boolean} - */ -var isSameTree = function(p, q) { - if(p == null || q == null) { - return p == q; - } - if(p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right)) { - return true; - } else { - return false; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Search Insert Position/README.md b/old(deprecated)/Algorithms/Search Insert Position/README.md deleted file mode 100644 index be12e74..0000000 --- a/old(deprecated)/Algorithms/Search Insert Position/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# [Search Insert Position](https://leetcode.com/problems/search-insert-position/#/description) -###### No:`35` -###### Difficulty:`Easy` -## JavaScript - - -```js -/** - * @param {number[]} nums - * @param {number} target - * @return {number} - */ -var searchInsert = function(nums, target) { - var start = 0; - var end = nums.length - 1; - var middle = parseInt((start + end) / 2); - - while(start <= end) { - if (target === nums[middle]) { - return middle; - } else if (target > nums[middle]) { - start = middle + 1; - } else if (target < nums[middle] ) { - end = middle - 1; - } - if (start > end) { - if (target < nums[middle]) { - return middle; - } else { - return middle + 1; - } - } else { - middle = parseInt((start + end) / 2); - } - } -}; -``` diff --git a/old(deprecated)/Algorithms/Search in Rotated Sorted Array/README.md b/old(deprecated)/Algorithms/Search in Rotated Sorted Array/README.md deleted file mode 100644 index ad7af47..0000000 --- a/old(deprecated)/Algorithms/Search in Rotated Sorted Array/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/#/description) -###### No:`33` -###### Difficulty:`Medium` -## JavaScript - - -```js -/** - * @param {number[]} nums - * @param {number} target - * @return {number} - */ -function binarySearch(nums, target) { - var end = nums.length - 1; - var start = 0; - var middle = parseInt((start + end) / 2); - - while (end >= start) { - if (nums[middle] == target) { - return middle; - } else if(nums[middle] > target) { - end = middle - 1; - } else if(nums[middle] < target) { - start = middle + 1; - } - middle = parseInt((start + end) / 2); - } - return -1; -} - -var search = function(nums, target) { - var i = 0; - while(nums[i] <= nums[i+1]) { - i++; - } - - if (nums[0] <= target && target <= nums[i]) { - return binarySearch(nums.slice(0, i + 1), target); - } else if (nums[i + 1] <= target && target <= nums[nums.length - 1]){ - var ret = binarySearch(nums.slice(i + 1), target); - return ret == -1 ? -1 : i + 1 + ret; - } else { - return -1; - } -}; - -``` diff --git a/old(deprecated)/Algorithms/Set Matrix Zeroes/README.md b/old(deprecated)/Algorithms/Set Matrix Zeroes/README.md deleted file mode 100644 index 418c0cd..0000000 --- a/old(deprecated)/Algorithms/Set Matrix Zeroes/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# [Set Matrix Zeroes](https://leetcode.com/problems/set-matrix-zeroes/) -###### No:`73` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[][]} matrix - * @return {void} Do not return anything, modify matrix in-place instead. - */ -var setZeroes = function(matrix) { - var hasZeroFirstCol = false; - for(var i = 0; i < matrix.length; i++) { - if(matrix[i][0] === 0) { - hasZeroFirstCol = true; - } - for(var j = 1; j < matrix[i].length; j++) { - if(matrix[i][j] === 0) { - matrix[0][j] = matrix[i][0] = 0; - } - } - } - for(var y = matrix.length - 1; y >= 0; y--) { - for(var x = matrix[y].length - 1; x >= 1; x--) { - if(matrix[0][x] === 0 || matrix[y][0] === 0) { - matrix[y][x] = 0; - } - } - if(hasZeroFirstCol) { - matrix[y][0] = 0; - } - } -}; -``` diff --git a/old(deprecated)/Algorithms/Single Number/README.md b/old(deprecated)/Algorithms/Single Number/README.md deleted file mode 100644 index cb4a38b..0000000 --- a/old(deprecated)/Algorithms/Single Number/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# [Single Number](https://leetcode.com/problems/single-number/) -###### No:`136` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[]} nums - * @return {number} - */ -var singleNumber = function(nums) { - return nums.reduce(function(prev, cur) { - return prev ^ cur; - }); -}; -``` - -#### Description: -Any number that XOR itselt will be 0; - diff --git a/old(deprecated)/Algorithms/Sort List/README.md b/old(deprecated)/Algorithms/Sort List/README.md deleted file mode 100644 index 2a2d19a..0000000 --- a/old(deprecated)/Algorithms/Sort List/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# [Sort List](https://leetcode.com/problems/sort-list/) -###### No:`148` -###### Difficulty:`Medium` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var sortList = function(head) { - function merge(l1, l2) { - if(!l1) return l2; - if(!l2) return l1; - var head = null - if(l1.val < l2.val) { - head = l1; - l1 = l1.next; - } else { - head = l2; - l2 = l2.next; - } - var newlist = head; - while(l1 && l2) { - if(l1.val < l2.val) { - newlist.next = l1; - l1 = l1.next; - } else { - newlist.next = l2; - l2 = l2.next; - } - newlist = newlist.next; - } - if(!l1) { - newlist.next = l2; - } else { - newlist.next = l1; - } - return head; - } - - if(!head || !head.next) { - return head; - } - - var p1 = head; - var p2 = head; - - // p1 go step 1 - // p2 go step 2 - while(p1 && p2) { - p2 = p2.next; - if(p2) { - p2 = p2.next; - } - if(!p2) { - break; - } - p1 = p1.next; - } - - var right = p1.next; - p1.next = null; - var left = head; - - return merge(sortList(left), sortList(right)); -} -``` diff --git a/old(deprecated)/Algorithms/Spiral Matrix/README.md b/old(deprecated)/Algorithms/Spiral Matrix/README.md deleted file mode 100644 index 73ca55d..0000000 --- a/old(deprecated)/Algorithms/Spiral Matrix/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# [Spiral Matrix](https://leetcode.com/problems/spiral-matrix/#/description) -###### No:`54` -###### Difficulty:`Medium` -## JavaScript - - -```js -/** - * @param {number[][]} matrix - * @return {number[]} - */ -var spiralOrder = function(matrix) { - if (matrix.length == 0) {return [];} - var n = matrix.length; - var m = matrix[0].length; - var up = 0, right = m - 1, down = n - 1, left = 0; - var ret = []; - - while(true) { - for(var r = left; r <= right; r++) ret.push(matrix[up][r]); - if (++up > down) break; - - for(var d = up; d <= down; d++) ret.push(matrix[d][right]); - if (--right < left) break; - - for(var l = right; l >= left; l--) ret.push(matrix[down][l]); - if (--down < up) break; - - for(var u = down; u >= up; u--) ret.push(matrix[u][left]); - if (++left > right) break; - } - return ret; -}; - -``` diff --git a/old(deprecated)/Algorithms/Sqrt(x)/README.md b/old(deprecated)/Algorithms/Sqrt(x)/README.md deleted file mode 100644 index 277ec32..0000000 --- a/old(deprecated)/Algorithms/Sqrt(x)/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# [Sqrt(x)](https://leetcode.com/problems/sqrtx/#/description) -###### No:`69` -###### Difficulty:`Easy` -## JavaScript - - -```js -/** - * @param {number} x - * @return {number} - */ -var mySqrt = function(x) { - var start = 1; - var end = x; - var middle; - - while (start <= end) { - middle = start + parseInt((end - start) / 2); - if (x / middle === middle) { - return middle; - } else if (x / middle > middle) { - start = middle + 1; - } else { - end = middle - 1; - } - } - - return end; -}; - -``` diff --git a/old(deprecated)/Algorithms/String to Integer (atoi)/README.md b/old(deprecated)/Algorithms/String to Integer (atoi)/README.md deleted file mode 100644 index cff1434..0000000 --- a/old(deprecated)/Algorithms/String to Integer (atoi)/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# [String to Integer (atoi)](https://leetcode.com/problems/string-to-integer-atoi/) -###### No:`8` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} str - * @return {number} - */ -var myAtoi = function(str) { - var ret = parseInt(str, 10); - if(Number.isNaN(ret)) { - return 0; - } - if(ret > 2147483647) { - return 2147483647; - } else if(ret < -2147483648) { - return -2147483648; - } else { - return ret; - } -}; -``` diff --git a/old(deprecated)/Algorithms/Sum of Left Leaves/README.md b/old(deprecated)/Algorithms/Sum of Left Leaves/README.md deleted file mode 100644 index ac2ff0c..0000000 --- a/old(deprecated)/Algorithms/Sum of Left Leaves/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# [Sum of Left Leaves](https://leetcode.com/problems/sum-of-left-leaves/) -###### No:`404` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {number} - */ -var sumOfLeftLeaves = function(root) { - if(root === null) return 0; - - if(root.left !== null && root.left.left === null && root.left.right === null) { - return root.left.val + sumOfLeftLeaves(root.right); - } else { - return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right); - } -}; -``` diff --git a/old(deprecated)/Algorithms/Summary Ranges/README.md b/old(deprecated)/Algorithms/Summary Ranges/README.md deleted file mode 100644 index 080e0f2..0000000 --- a/old(deprecated)/Algorithms/Summary Ranges/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# [Summary Ranges](https://leetcode.com/problems/summary-ranges/) -###### No:`228` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @return {string[]} - */ -var summaryRanges = function(nums) { - if(nums.length === 0) { - return nums; - } - - var ret = []; - var start = 0; - - for(var i = 1; i < nums.length; i++) { - if(nums[i] - nums[i-1] != 1) { - ret.push(nums.slice(start, i)); - start = i; - } - } - ret.push(nums.slice(start)); - - ret = ret.map(function(item) { - if(item.length > 1) { - return item[0] + '->' + item[item.length - 1]; - } else { - return item[0] + ''; - } - }); - - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Swap Nodes in Pairs/README.md b/old(deprecated)/Algorithms/Swap Nodes in Pairs/README.md deleted file mode 100644 index 68ee3a7..0000000 --- a/old(deprecated)/Algorithms/Swap Nodes in Pairs/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# [Swap Nodes in Pairs](https://leetcode.com/problems/swap-nodes-in-pairs/) -###### No:`24` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for singly-linked list. - * function ListNode(val) { - * this.val = val; - * this.next = null; - * } - */ -/** - * @param {ListNode} head - * @return {ListNode} - */ -var swapPairs = function(head) { - if(head === null || head.next === null) { - return head; - } - - var newhead = null; - var tmp1 = head.next; - var tmp2 = head.next.next; - head.next.next = head; - head.next = tmp2; - - newhead = tmp1; - - var p = head; - while(p && p.next && p.next.next) { - tmp1 = p.next.next; - tmp2 = p.next.next.next; - p.next.next.next = p.next; - p.next.next = tmp2; - p.next = tmp1; - p = p.next.next; - } - - return newhead; -}; -``` diff --git a/old(deprecated)/Algorithms/Symmetric Tree/README.md b/old(deprecated)/Algorithms/Symmetric Tree/README.md deleted file mode 100644 index 7d62f44..0000000 --- a/old(deprecated)/Algorithms/Symmetric Tree/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# [Symmetric Tree](https://leetcode.com/problems/symmetric-tree/) -###### No:`101` -###### Difficulty:`Easy` - - -```javascript -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {boolean} - */ - -var isSymmetric = function(root) { - function isSymmetricNode(left, right) { - if(!left && !right) { - return true; - } - if((left && !right) || (!left && right)) { - return false; - } - return (left.val == right.val) - && isSymmetricNode(left.left, right.right) - && isSymmetricNode(left.right, right.left); - } - if(root === null) { - return true; - } - var left = root.left; - var right = root.right; - return isSymmetricNode(left, right); -}; - -``` diff --git a/old(deprecated)/Algorithms/Teemo Attacking/README.md b/old(deprecated)/Algorithms/Teemo Attacking/README.md deleted file mode 100644 index 1f0b01a..0000000 --- a/old(deprecated)/Algorithms/Teemo Attacking/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# [Teemo Attacking](https://leetcode.com/problems/teemo-attacking/#/description) -###### No:`495` -###### Difficulty:`Medium` -## JavaScript - - -```js -/** - * @param {number[]} timeSeries - * @param {number} duration - * @return {number} - */ -var findPoisonedDuration = function(timeSeries, duration) { - if (timeSeries.length === 0) return 0; - - var time = 0; - for (var i = 0; i < timeSeries.length - 1; i++) { - if (timeSeries[i + 1] - timeSeries[i] < duration) { - time += timeSeries[i + 1] - timeSeries[i]; - } else { - time += duration; - } - } - time += duration; - - return time; -}; -``` diff --git a/old(deprecated)/Algorithms/Third Maximum Number/README.md b/old(deprecated)/Algorithms/Third Maximum Number/README.md deleted file mode 100644 index 34ca21e..0000000 --- a/old(deprecated)/Algorithms/Third Maximum Number/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# [Third Maximum Number](https://leetcode.com/problems/third-maximum-number/#/description) -###### No:`414` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number[]} nums - * @return {number} - */ -var getMax = function(nums) { - return Math.max.apply(null, nums); -}; - -var removeItem = function(nums, item) { - return nums.filter((value) => value !== item); -}; - -var thirdMax = function(nums) { - var first = getMax(nums); - nums = removeItem(nums, first); - var second = getMax(nums); - nums = removeItem(nums, second); - - if (nums.length === 0) return first; - return getMax(nums); - -}; - -``` diff --git a/old(deprecated)/Algorithms/Top K Frequent Elements/README.md b/old(deprecated)/Algorithms/Top K Frequent Elements/README.md deleted file mode 100644 index 69f986b..0000000 --- a/old(deprecated)/Algorithms/Top K Frequent Elements/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# [Top K Frequent Elements](https://leetcode.com/problems/top-k-frequent-elements/) -###### No:`347` -###### Difficulty:`Medium` - - -```javascript -/** - * @param {number[]} nums - * @param {number} k - * @return {number[]} - */ - -function SortNumber(size) { - this.size = size; - this.container = []; -} -SortNumber.prototype.setCompare = function(compare) { - this.compare = compare; -} -SortNumber.prototype.getMax = function() { - return this.max; -} -SortNumber.prototype.getMin = function() { - return this.min; -} -SortNumber.prototype.getAll = function() { - return this.container; -} -SortNumber.prototype.setBigNumber = function(num) { - if (this.container.length < this.size) { - this.container.push(num); - } else if (this.compare(this.min, num) < 0) { - this.container.shift(); - this.container.push(num); - } else { - return; - } - - this.container.sort(this.compare); - this.max = this.container[this.container.length - 1]; - this.min = this.container[0]; -} - -var topKFrequent = function(nums, k) { - var topNumber = new SortNumber(k); - topNumber.setCompare((a, b) => a.count - b.count); - var showTimes = {}; - nums.map((num) => { - if(showTimes[num]) { - showTimes[num]++; - } else { - showTimes[num] = 1; - } - }); - for(var num in showTimes) { - topNumber.setBigNumber({ - value: num, - count: showTimes[num], - }); - } - - return topNumber.getAll().map((item) => parseInt(item.value)); -}; -``` diff --git a/old(deprecated)/Algorithms/Two Sum/README.md b/old(deprecated)/Algorithms/Two Sum/README.md deleted file mode 100644 index da17064..0000000 --- a/old(deprecated)/Algorithms/Two Sum/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# [Two Sum](https://leetcode.com/problems/two-sum/) -###### No:`1` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number[]} nums - * @param {number} target - * @return {number[]} - */ -var twoSum = function(nums, target) { - var ret = []; - for(var i = 0; i < nums.length; i++) { - for(var j = i + 1; j < nums.length; j++) { - if(nums[i] + nums[j] === target) { - ret.push(i); - ret.push(j); - } - } - } - return ret; -}; -``` diff --git a/old(deprecated)/Algorithms/Ugly Number/README.md b/old(deprecated)/Algorithms/Ugly Number/README.md deleted file mode 100644 index e9f9e04..0000000 --- a/old(deprecated)/Algorithms/Ugly Number/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# [Ugly Number](https://leetcode.com/problems/ugly-number/) -###### No:`263` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {number} num - * @return {boolean} - */ -var isUgly = function(num) { - if(num <= 0) { - return false; - } - while(num % 2 === 0) {num /= 2;} - while(num % 3 === 0) {num /= 3;} - while(num % 5 === 0) {num /= 5;} - return num === 1 ? true : false; -}; -``` diff --git a/old(deprecated)/Algorithms/Valid Anagram/README.md b/old(deprecated)/Algorithms/Valid Anagram/README.md deleted file mode 100644 index 2ceaf86..0000000 --- a/old(deprecated)/Algorithms/Valid Anagram/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# [Valid Anagram](https://leetcode.com/problems/valid-anagram/) -###### No:`242` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @param {string} t - * @return {boolean} - */ -var isAnagram = function(s, t) { - var arr1 = s.split('').sort(); - var arr2 = t.split('').sort(); - if(arr1.length !== arr2.length) { - return false; - } - for(var i = 0; i < arr1.length; i++) { - if(arr1[i] !== arr2[i]) { - return false; - } - } - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/Valid Palindrome/README.md b/old(deprecated)/Algorithms/Valid Palindrome/README.md deleted file mode 100644 index 56cbaa0..0000000 --- a/old(deprecated)/Algorithms/Valid Palindrome/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# [Valid Palindrome](https://leetcode.com/problems/valid-palindrome/) -###### No:`125` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @return {boolean} - */ -var isPalindrome = function(s) { - var str = s.split('').filter(function(c) { - return c.match(/[\w\d]/); - }).join('').toLowerCase(); - - if(str === '') { - return true; - } - var i = 0; - var j = str.length - 1; - while(i < j) { - if(str[i] != str[j]) { - return false; - } - i++; - j--; - } - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/Valid Parentheses/README.md b/old(deprecated)/Algorithms/Valid Parentheses/README.md deleted file mode 100644 index 4c34ce2..0000000 --- a/old(deprecated)/Algorithms/Valid Parentheses/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# [Valid Parentheses](https://leetcode.com/problems/valid-parentheses/) -###### No:`20` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @return {boolean} - */ -var isValid = function(s) { - var stack = []; - var match = { - ')': '(', - ']': '[', - '}': '{' - }; - var len; - for(var i = 0; i < s.length; i++) { - len = stack.length; - if(len > 0 && stack[len-1] == match[s[i]]) { - stack.pop(); - } else { - stack.push(s[i]); - } - } - return stack.length === 0; -}; -``` diff --git a/old(deprecated)/Algorithms/Valid Perfect Square/README.md b/old(deprecated)/Algorithms/Valid Perfect Square/README.md deleted file mode 100644 index 52ec1fa..0000000 --- a/old(deprecated)/Algorithms/Valid Perfect Square/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# [Valid Perfect Square](https://leetcode.com/problems/valid-perfect-square/#/description) -###### No:`367` -###### Difficulty:`Easy` - - - -```js -/** - * @param {number} num - * @return {boolean} - */ -var isPerfectSquare = function(num) { - if (num < 1) return false; - if (num === 1) return true; - - var start = 0; - var end = num; - var middle = num / 2; - - while (start <= end) { - if (parseInt(num / middle) === middle && num % middle === 0) { - return true; - } else if (num / middle > middle) { - start = middle + 1; - } else if (num / middle < middle) { - end = middle - 1; - } - middle = parseInt((start + end) / 2); - } - - return false; -}; -``` diff --git a/old(deprecated)/Algorithms/Valid Sudoku/README.md b/old(deprecated)/Algorithms/Valid Sudoku/README.md deleted file mode 100644 index 475f14c..0000000 --- a/old(deprecated)/Algorithms/Valid Sudoku/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# [Valid Sudoku](https://leetcode.com/problems/valid-sudoku/) -###### No:`36` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {character[][]} board - * @return {boolean} - */ -var isValidSudoku = function(board) { - var rowExist = {}; - var colExist = {}; - var boxExist = {}; - var k, value; - for (var i = 0; i < board.length; i++) { - for (var j = 0; j < board[i].length; j++) { - value = board[i][j]; - k = parseInt(i / 3, 10) * 3 + parseInt(j / 3, 10); //the number of the box - if (!rowExist[i]) { - rowExist[i] = {}; - } - if (!colExist[j]) { - colExist[j] = {}; - } - if (!boxExist[k]) { - boxExist[k] = {}; - } - - if (value !== '.') { - if (rowExist[i][value] || colExist[j][value] || boxExist[k][value]) { - return false; - } else { - rowExist[i][value] = true; - colExist[j][value] = true; - boxExist[k][value] = true; - } - } - } - } - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/Validate Binary Search Tree/README.md b/old(deprecated)/Algorithms/Validate Binary Search Tree/README.md deleted file mode 100644 index d73ea67..0000000 --- a/old(deprecated)/Algorithms/Validate Binary Search Tree/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# [Validate Binary Search Tree](https://leetcode.com/problems/validate-binary-search-tree/) -###### No:`98` -###### Difficulty:`Medium` -## JavaScript - - -```js -/** - * Definition for a binary tree node. - * function TreeNode(val) { - * this.val = val; - * this.left = this.right = null; - * } - */ -/** - * @param {TreeNode} root - * @return {boolean} - */ - -var traverse = function(root, cb) { - if (root === null) { - return; - } - traverse(root.left, cb); - cb(root); - traverse(root.right, cb); - -}; -var isValidBST = function(root) { - var arr = []; - traverse(root, function(node) { - arr.push(node.val); - }); - - for(var i = 0; i < arr.length - 1; i++) { - if (arr[i] >= arr[i + 1]) { - return false; - } - } - return true; -}; -``` diff --git a/old(deprecated)/Algorithms/ZigZag Conversion/README.md b/old(deprecated)/Algorithms/ZigZag Conversion/README.md deleted file mode 100644 index d88436d..0000000 --- a/old(deprecated)/Algorithms/ZigZag Conversion/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# [ZigZag Conversion](https://leetcode.com/problems/zigzag-conversion/) -###### No:`6` -###### Difficulty:`Easy` - - -```javascript -/** - * @param {string} s - * @param {number} numRows - * @return {string} - */ -var convert = function(s, numRows) { - var chars = s.split(''); - var arrs = []; - for(var k = 0; k < numRows; k++) { - arrs.push([]); - } - - var i = 0; - while(i < chars.length) { - for(var x = 0; x < numRows && i < chars.length; x++) { - arrs[x].push(chars[i++]); - } - for(var x = numRows - 2; x > 0 && i < chars.length; x--) { - arrs[x].push(chars[i++]); - } - } - - var ret = ''; - arrs.map(function(item) { - ret = ret.concat(item.join('')); - }); - return ret; -}; -``` -### How to solve? -``` -1 9 17 -2 8 10 16 18 -3 7 11 15 -4 6 12 14 -5 13 -``` - -###### 1.Create `arrs = [[],[],[],[],[]]` - -###### 2.traverse `chars` than save the every char like the following: -arrs[0] = [1, 9, 17]; -arrs[1] = [2, 8, 10, 16, 18]; -arrs[2] = [3, 7, 11, 15]; -arrs[3] = [4, 6, 12, 14]; -arrs[4] = [5, 13]; - -###### 3.concat arrs diff --git a/old(deprecated)/README.md b/old(deprecated)/README.md deleted file mode 100644 index 64c367a..0000000 --- a/old(deprecated)/README.md +++ /dev/null @@ -1,161 +0,0 @@ -leetcode -======== -#### Total solved: 153 (Easy: 111 Medium: 41 Hard: 1 ) -My JavaScript Solution of [leetcode](http://oj.leetcode.com/problems/) - - -| No | Title | Source Code | Difficulty | -|----| ----- | -------- | ---------- | -|544|Output Contest Matches|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Output%20Contest%20Matches)|Medium| -|543|Diameter of Binary Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Diameter%20of%20Binary%20Tree)|Easy| -|542|01 Matrix|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/01%20Matrix)|Medium| -|538|Convert BST to Greater Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Convert%20BST%20to%20Greater%20Tree)|Medium| -|532|K-diff Pairs in an Array|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/K-diff%20Pairs%20in%20an%20Array)|Easy| -|530|Minimum Absolute Difference in BST|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Minimum%20Absolute%20Difference%20in%20BST)|Easy| -|529|Minesweeper|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Minesweeper)|Medium| -|526|Beautiful Arrangement|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Beautiful%20Arrangement)|Medium| -|520|Detect Capital|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Detect%20Capital)|Easy| -|515|Find Largest Value in Each Tree Row|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Find%20Largest%20Value%20in%20Each%20Tree%20Row)|Medium| -|513|Find Bottom Left Tree Value|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Find%20Bottom%20Left%20Tree%20Value)|Medium| -|508|Most Frequent Subtree Sum|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Most%20Frequent%20Subtree%20Sum)|Medium| -|506|Relative Ranks|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Relative%20Ranks)|Easy| -|504|Base 7|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Base%207)|Easy| -|503|Next Greater Element II|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Next%20Greater%20Element%20II)|Medium| -|501|Find Mode in Binary Search Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Find%20Mode%20in%20Binary%20Search%20Tree)|Easy| -|500|Keyboard Row|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Keyboard%20Row)|Easy| -|496|Next Greater Element I|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Next%20Greater%20Element%20I)|Easy| -|492|Construct the Rectangle|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Construct%20the%20Rectangle)|Easy| -|485|Max Consecutive Ones|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Max%20Consecutive%20Ones)|Easy| -|482|License Key Formatting|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/License%20Key%20Formatting)|Medium| -|476|Number Complement|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Number%20Complement)|Easy| -|463|Add Digits|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Add%20Digits)|Easy| -|461|Hamming Distance|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Hamming%20Distance)|Easy| -|459|Repeated Substring Pattern|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Repeated%20Substring%20Pattern)|Easy| -|455|Assign Cookies|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Assign%20Cookies)|Easy| -|453|Minimum Moves to Equal Array Elements|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Minimum%20Moves%20to%20Equal%20Array%20Elements)|Easy| -|450|Delete Node in a BST|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Delete%20Node%20in%20a%20BST)|Medium| -|448|Find All Numbers Disappeared in an Array|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Find%20All%20Numbers%20Disappeared%20in%20an%20Array)|Easy| -|447|Number of Boomerangs|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Number%20of%20Boomerangs)|Easy| -|442|Find All Duplicates in an Array|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Find%20All%20Duplicates%20in%20an%20Array)|Medium| -|441|Arranging Coins|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Arranging%20Coins)|Easy| -|437|Path Sum III|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Path%20Sum%20III)|Easy| -|434|Number of Segments in a String|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Number%20of%20Segments%20in%20a%20String)|Easy| -|415|Add Strings|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Add%20Strings)|Easy| -|414|Third Maximum Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Third%20Maximum%20Number)|Easy| -|413|Arithmetic Slices|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Arithmetic%20Slices)|Medium| -|412|Fizz Buzz|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Fizz%20Buzz)|Easy| -|409|Longest Palindrome|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Longest%20Palindrome)|Easy| -|406|Queue Reconstruction by Height|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Queue%20Reconstruction%20by%20Height)|Medium| -|404|Sum of Left Leaves|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Sum%20of%20Left%20Leaves)|Easy| -|401|Binary Watch|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Binary%20Watch)|Easy| -|400|Nth Digit|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Nth%20Digit)|Easy| -|389|Find the Difference|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Find%20the%20Difference)|Easy| -|387|First Unique Character in a String|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/First%20Unique%20Character%20in%20a%20String)|Easy| -|383|Ransom Note|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Ransom%20Note)|Easy| -|374|Guess Number Higher or Lower|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Guess%20Number%20Higher%20or%20Lower)|Easy| -|367|Valid Perfect Square|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Valid%20Perfect%20Square)|Easy| -|350|Intersection of Two Arrays II|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Intersection%20of%20Two%20Arrays%20II)|Easy| -|349|Intersection of Two Arrays|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Intersection%20of%20Two%20Arrays)|Easy| -|347|Top K Frequent Elements|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Top%20K%20Frequent%20Elements)|Medium| -|345|Reverse Vowels of a String|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Reverse%20Vowels%20of%20a%20String)|Easy| -|344|Reverse String|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Reverse%20String)|Easy| -|343|Integer Break|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Integer%20Break)|Medium| -|342|Power of Four|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Power%20of%20Four)|Easy| -|338|Counting Bits|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Counting%20Bits)|Medium| -|328|Odd Even Linked List|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Odd%20Even%20Linked%20List)|Medium| -|326|Power of Three|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Power%20of%20Three)|Easy| -|319|Add Digits|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Add%20Digits)|Medium| -|292|Nim Game|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Nim%20Game)|Easy| -|283|Move Zeroes|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Move%20Zeroes)|Easy| -|278|First Bad Version|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/First%20Bad%20Version)|Easy| -|268|Missing Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Missing%20Number)|Medium| -|263|Ugly Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Ugly%20Number)|Easy| -|258|Add Digits|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Add%20Digits)|Easy| -|257|Binary Tree Paths|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Binary%20Tree%20Paths)|Easy| -|242|Valid Anagram|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Valid%20Anagram)|Easy| -|238|Product of Array Except Self|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Product%20of%20Array%20Except%20Self)|Medium| -|237|Delete Node in a Linked List|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Delete%20Node%20in%20a%20Linked%20List)|Easy| -|235|Lowest Common Ancestor of a Binary Search Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree)|Easy| -|234|Palindrome Linked List|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Palindrome%20Linked%20List)|Easy| -|232|Implement Queue using Stacks|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Implement%20Queue%20using%20Stacks)|Easy| -|231|Power of Two|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Power%20of%20Two)|Easy| -|228|Summary Ranges|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Summary%20Ranges)|Easy| -|226|Invert Binary Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Invert%20Binary%20Tree)|Easy| -|223|Rectangle Area|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Rectangle%20Area)|Easy| -|219|Contains Duplicate II|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Contains%20Duplicate%20II)|Easy| -|217|Contains Duplicate|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Contains%20Duplicate)|Easy| -|206|Reverse Linked List|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Reverse%20Linked%20List)|Easy| -|205|Isomorphic Strings|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Isomorphic%20Strings)|Easy| -|204|Count Primes|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Count%20Primes)|Easy| -|203|Remove Linked List Elements|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Remove%20Linked%20List%20Elements)|Easy| -|202|Happy Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Happy%20Number)|Easy| -|198|House Robber|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/House%20Robber)|Easy| -|191|Number of 1 Bits|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Number%20of%201%20Bits)|Easy| -|189|Rotate Array|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Rotate%20Array)|Easy| -|179|Largest Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Largest%20Number)|Medium| -|172|Factorial Trailing Zeroes|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Factorial%20Trailing%20Zeroes)|Easy| -|171|Excel Sheet Column Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Excel%20Sheet%20Column%20Number)|Easy| -|169|Majority Element|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Majority%20Element)|Easy| -|168|Excel Sheet Column Title|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Excel%20Sheet%20Column%20Title)|Easy| -|165|Compare Version Numbers|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Compare%20Version%20Numbers)|Easy| -|160|Intersection of Two Linked Lists|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Intersection%20of%20Two%20Linked%20Lists)|Easy| -|155|Min Stack|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Min%20Stack)|Easy| -|151|Reverse Words in a String|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Reverse%20Words%20in%20a%20String)|Easy| -|150|Evaluate Reverse Polish Notation|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Evaluate%20Reverse%20Polish%20Notation)|Medium| -|149|Max Points on a Line|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Max%20Points%20on%20a%20Line)|Hard| -|148|Sort List|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Sort%20List)|Medium| -|144|Binary Tree Preorder Traversal|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Binary%20Tree%20Preorder%20Traversal)|Medium| -|141|Linked List Cycle|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Linked%20List%20Cycle)|Easy| -|138|Copy List with Random Pointer|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Copy%20List%20with%20Random%20Pointer)|Medium| -|136|Single Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Single%20Number)|Medium| -|125|Valid Palindrome|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Valid%20Palindrome)|Easy| -|122|Best Time to Buy and Sell Stock II|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20II)|Medium| -|121|Best Time to Buy and Sell Stock|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Best%20Time%20to%20Buy%20and%20Sell%20Stock)|Easy| -|119|Pascal's Triangle II|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Pascal's%20Triangle%20II)|Easy| -|118|Pascal's Triangle|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Pascal's%20Triangle)|Easy| -|112|Path Sum|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Path%20Sum)|Easy| -|111|Minimum Depth of Binary Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Minimum%20Depth%20of%20Binary%20Tree)|Easy| -|110|Balanced Binary Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Balanced%20Binary%20Tree)|Easy| -|108|Convert Sorted Array to Binary Search Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Convert%20Sorted%20Array%20to%20Binary%20Search%20Tree)|Easy| -|107|Binary Tree Level Order Traversal II|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Binary%20Tree%20Level%20Order%20Traversal%20II)|Easy| -|104|Maximum Depth of Binary Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Maximum%20Depth%20of%20Binary%20Tree)|Easy| -|102|Binary Tree Level Order Traversal|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Binary%20Tree%20Level%20Order%20Traversal)|Easy| -|101|Symmetric Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Symmetric%20Tree)|Easy| -|100|Same Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Same%20Tree)|Easy| -|98|Validate Binary Search Tree|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Validate%20Binary%20Search%20Tree)|Medium| -|92|Reverse Linked List II|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Reverse%20Linked%20List%20II)|Medium| -|88|Merge Sorted Array|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Merge%20Sorted%20Array)|Easy| -|83|Remove Duplicates from Sorted List|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Remove%20Duplicates%20from%20Sorted%20List)|Easy| -|73|Set Matrix Zeroes|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Set%20Matrix%20Zeroes)|Medium| -|70|Climbing Stairs|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Climbing%20Stairs)|Easy| -|69|Sqrt(x)|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Sqrt(x))|Easy| -|66|Plus One|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Plus%20One)|Easy| -|58|Length of Last Word|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Length%20of%20Last%20Word)|Easy| -|54|Spiral Matrix|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Spiral%20Matrix)|Medium| -|53|Maximum Subarray|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Maximum%20Subarray)|Easy| -|46|Permutations|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Permutations)|Medium| -|38|Count and Say|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Count%20and%20Say)|Easy| -|36|Valid Sudoku|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Valid%20Sudoku)|Easy| -|35|Search Insert Position|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Search%20Insert%20Position)|Easy| -|33|Search in Rotated Sorted Array|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Search%20in%20Rotated%20Sorted%20Array)|Medium| -|31|Next Permutation|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Next%20Permutation)|Medium| -|29|Divide Two Integers|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Divide%20Two%20Integers)|Medium| -|28|Implement strStr()|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Implement%20strStr())|Easy| -|27|Remove Element|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Remove%20Element)|Easy| -|26|Remove Duplicates from Sorted Array|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Remove%20Duplicates%20from%20Sorted%20Array)|Easy| -|24|Swap Nodes in Pairs|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Swap%20Nodes%20in%20Pairs)|Easy| -|22|Generate Parentheses|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Generate%20Parentheses)|Medium| -|21|Merge Two Sorted Lists|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Merge%20Two%20Sorted%20Lists)|Easy| -|20|Valid Parentheses|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Valid%20Parentheses)|Easy| -|19|Remove Nth Node From End of List|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Remove%20Nth%20Node%20From%20End%20of%20List)|Easy| -|17|Letter Combinations of a Phone Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Letter%20Combinations%20of%20a%20Phone%20Number)|Medium| -|16|3Sum Closest|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/3Sum%20Closest)|Medium| -|15|3Sum|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/3Sum)|Medium| -|14|Longest Common Prefix|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Longest%20Common%20Prefix)|Easy| -|13|Roman to Integer|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Roman%20to%20Integer)|Easy| -|12|Integer to Roman|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Integer%20to%20Roman)|Medium| -|9|Palindrome Number|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Palindrome%20Number)|Easy| -|8|String to Integer (atoi)|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/String%20to%20Integer%20(atoi))|Easy| -|7|Reverse Integer|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Reverse%20Integer)|Easy| -|6|ZigZag Conversion|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/ZigZag%20Conversion)|Easy| -|1|Two Sum|[JavaScript](https://github.com/duteng/leetcode/tree/master/Algorithms/Two%20Sum)|Easy| diff --git a/old(deprecated)/generate-md.js b/old(deprecated)/generate-md.js deleted file mode 100644 index fab5af6..0000000 --- a/old(deprecated)/generate-md.js +++ /dev/null @@ -1,65 +0,0 @@ -var fs = require('fs'); -var events = require('events'); -var proxy = new events.EventEmitter(); - -var dir = './Algorithms'; -var repo_url = 'https://github.com/duteng/leetcode/tree/master/Algorithms/'; -var ret = []; - -var total = 0; -var easy = 0; -var medium = 0; -var hard = 0; - -targetDirs = fs.readdir(dir, function(err, files) { - var count = files.length; - files.forEach(function(value, index, arr) { - fs.readFile(dir + '/' + value + '/README.md', {encoding: 'utf8'}, function(err, data) { - var no = parseInt(data.match(/###### No:`(\d+)`/)[1], 10); - var difficulty = data.match(/###### Difficulty:`(\w+)`/)[1]; - var title = data.match(/# \[(.*)\]/)[1]; - var link = '[JavaScript](' + repo_url + title.replace(/\s/g, '%20') + ')'; - - total++; - if (difficulty === 'Hard') { - hard++; - } else if (difficulty === 'Medium') { - medium++; - } else if (difficulty === 'Easy') { - easy++; - } - ret.push({ - no: no, - title:title, - difficulty: difficulty, - link: link - }); - if(ret.length == count) { - proxy.emit('readDone'); - } - - }); - }); -}); - -proxy.once('readDone', function() { - ret.sort(function(a, b) { - return b.no - a.no; - }); - - var content = [ - 'leetcode', - '========', - `#### Total solved: ${total} (Easy: ${easy} Medium: ${medium} Hard: ${hard} )`, - 'My JavaScript Solution of [leetcode](http://oj.leetcode.com/problems/)', - '', - '', - '| No | Title | Source Code | Difficulty |', - '|----| ----- | -------- | ---------- |' - ].join('\r\n') + '\r\n'; - - for(var i = 0; i < ret.length; i++) { - content += '|' + ret[i].no + '|' + ret[i].title + '|' + ret[i].link + '|' + ret[i].difficulty + '|' + '\r\n'; - } - fs.writeFile('README.md', content); -}); diff --git a/old(deprecated)/package.json b/old(deprecated)/package.json deleted file mode 100644 index 12852d1..0000000 --- a/old(deprecated)/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "request-leetcode", - "version": "1.0.0", - "description": "leetcode\r ========\r My JavaScript Solution of [leetcode](http://oj.leetcode.com/problems/)", - "main": "request.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/duteng/leedcode.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/duteng/leedcode/issues" - }, - "homepage": "https://github.com/duteng/leedcode#readme", - "dependencies": { - "cheerio": "^0.22.0", - "request": "^2.81.0" - } -} diff --git a/old(deprecated)/request-problem.js b/old(deprecated)/request-problem.js deleted file mode 100644 index e5f405b..0000000 --- a/old(deprecated)/request-problem.js +++ /dev/null @@ -1,39 +0,0 @@ -var fs = require('fs'); -var request = require('request'); -var cheerio = require('cheerio'); - -var urls = [ - 'https://leetcode.com/problems/linked-list-random-node/#/description', -]; - -urls.forEach((url) => { - request(url, (err, response, body) => { - console.log(url, err); - var $ = cheerio.load(body); - var textArr = $('.question-title h3').text().trim().split('. '); - var no = textArr[0]; - var title = textArr[1]; - var difficulty = $('.question-info li').eq(2).text().split(': ').pop(); - - var folderPath = `Algorithms/${title}`; - var filePath = `${folderPath}/README.md`; - - - fs.mkdir(folderPath, (err) => { - fs.open(filePath, 'wx', (err) => { - var content = [ - `# [${title}](${url})`, - `###### No:\`${no}\``, - `###### Difficulty:\`${difficulty}\``, - '## JavaScript', - '', - '', - '```js', - '```', - ].join('\r\n') + '\r\n'; - - fs.writeFile(filePath, content); - }); - }); - }); -}); diff --git a/params.json b/params.json new file mode 100644 index 0000000..e0ab799 --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"Leedcode","tagline":"","body":"### Welcome to GitHub Pages.\r\nThis automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:\r\n\r\n```\r\n$ cd your_repo_root/repo_name\r\n$ git fetch origin\r\n$ git checkout gh-pages\r\n```\r\n\r\nIf you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.\r\n\r\n### Designer Templates\r\nWe've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.\r\n\r\n### Rather Drive Stick?\r\nIf you prefer to not use the automatic generator, push a branch named `gh-pages` to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.\r\n\r\n### Authors and Contributors\r\nYou can @mention a GitHub username to generate a link to their profile. The resulting `` element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.\r\n\r\n### Support or Contact\r\nHaving trouble with Pages? Check out the documentation at http://help.github.com/pages or contact support@github.com and we’ll help you sort it out.\r\n","google":"","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 0000000..1926cfd --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,60 @@ +.highlight .hll { background-color: #49483e } +.highlight { background: #3A3C42; color: #f8f8f2 } +.highlight .c { color: #75715e } /* Comment */ +.highlight .err { color: #960050; background-color: #1e0010 } /* Error */ +.highlight .k { color: #66d9ef } /* Keyword */ +.highlight .l { color: #ae81ff } /* Literal */ +.highlight .n { color: #f8f8f2 } /* Name */ +.highlight .o { color: #f92672 } /* Operator */ +.highlight .p { color: #f8f8f2 } /* Punctuation */ +.highlight .cm { color: #75715e } /* Comment.Multiline */ +.highlight .cp { color: #75715e } /* Comment.Preproc */ +.highlight .c1 { color: #75715e } /* Comment.Single */ +.highlight .cs { color: #75715e } /* Comment.Special */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .kc { color: #66d9ef } /* Keyword.Constant */ +.highlight .kd { color: #66d9ef } /* Keyword.Declaration */ +.highlight .kn { color: #f92672 } /* Keyword.Namespace */ +.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */ +.highlight .kr { color: #66d9ef } /* Keyword.Reserved */ +.highlight .kt { color: #66d9ef } /* Keyword.Type */ +.highlight .ld { color: #e6db74 } /* Literal.Date */ +.highlight .m { color: #ae81ff } /* Literal.Number */ +.highlight .s { color: #e6db74 } /* Literal.String */ +.highlight .na { color: #a6e22e } /* Name.Attribute */ +.highlight .nb { color: #f8f8f2 } /* Name.Builtin */ +.highlight .nc { color: #a6e22e } /* Name.Class */ +.highlight .no { color: #66d9ef } /* Name.Constant */ +.highlight .nd { color: #a6e22e } /* Name.Decorator */ +.highlight .ni { color: #f8f8f2 } /* Name.Entity */ +.highlight .ne { color: #a6e22e } /* Name.Exception */ +.highlight .nf { color: #a6e22e } /* Name.Function */ +.highlight .nl { color: #f8f8f2 } /* Name.Label */ +.highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +.highlight .nx { color: #a6e22e } /* Name.Other */ +.highlight .py { color: #f8f8f2 } /* Name.Property */ +.highlight .nt { color: #f92672 } /* Name.Tag */ +.highlight .nv { color: #f8f8f2 } /* Name.Variable */ +.highlight .ow { color: #f92672 } /* Operator.Word */ +.highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +.highlight .mf { color: #ae81ff } /* Literal.Number.Float */ +.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ +.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ +.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ +.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ +.highlight .sc { color: #e6db74 } /* Literal.String.Char */ +.highlight .sd { color: #e6db74 } /* Literal.String.Doc */ +.highlight .s2 { color: #e6db74 } /* Literal.String.Double */ +.highlight .se { color: #ae81ff } /* Literal.String.Escape */ +.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ +.highlight .si { color: #e6db74 } /* Literal.String.Interpol */ +.highlight .sx { color: #e6db74 } /* Literal.String.Other */ +.highlight .sr { color: #e6db74 } /* Literal.String.Regex */ +.highlight .s1 { color: #e6db74 } /* Literal.String.Single */ +.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ +.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ +.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ +.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ +.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/stylesheets/styles.css b/stylesheets/styles.css new file mode 100644 index 0000000..466b9d6 --- /dev/null +++ b/stylesheets/styles.css @@ -0,0 +1,356 @@ +@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700); +html { + background: #6C7989; + background: #6c7989 -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #6c7989), color-stop(100%, #434b55)) fixed; + background: #6c7989 -webkit-linear-gradient(#6c7989, #434b55) fixed; + background: #6c7989 -moz-linear-gradient(#6c7989, #434b55) fixed; + background: #6c7989 -o-linear-gradient(#6c7989, #434b55) fixed; + background: #6c7989 -ms-linear-gradient(#6c7989, #434b55) fixed; + background: #6c7989 linear-gradient(#6c7989, #434b55) fixed; +} + +body { + padding: 50px 0; + margin: 0; + font: 14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #555; + font-weight: 300; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAUdEVYdENyZWF0aW9uIFRpbWUAMy82LzEygrTcTAAAAFRJREFUSIljfPDggZRf5RIGGNjUHsNATz6jXmSL1Kb2GLiAX+USBnrymRgGGDCORgFmoNAXjEbBaBSMRsFoFIxGwWgUjEbBaBSMRsFoFIxGwWgUAABYNujumib3wAAAAABJRU5ErkJggg==') fixed; +} + +.wrapper { + width: 640px; + margin: 0 auto; + background: #DEDEDE; + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + -ms-border-radius: 8px; + -o-border-radius: 8px; + border-radius: 8px; + -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px; + -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px; + box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px, rgba(0, 0, 0, 0.45) 0 3px 10px; +} + +header, section, footer { + display: block; +} + +a { + color: #069; + text-decoration: none; +} + +p { + margin: 0 0 20px; + padding: 0; +} + +strong { + color: #222; + font-weight: 700; +} + +header { + -webkit-border-radius: 8px 8px 0 0; + -moz-border-radius: 8px 8px 0 0; + -ms-border-radius: 8px 8px 0 0; + -o-border-radius: 8px 8px 0 0; + border-radius: 8px 8px 0 0; + background: #C6EAFA; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ddfbfc), color-stop(100%, #c6eafa)); + background: -webkit-linear-gradient(#ddfbfc, #c6eafa); + background: -moz-linear-gradient(#ddfbfc, #c6eafa); + background: -o-linear-gradient(#ddfbfc, #c6eafa); + background: -ms-linear-gradient(#ddfbfc, #c6eafa); + background: linear-gradient(#ddfbfc, #c6eafa); + position: relative; + padding: 15px 20px; + border-bottom: 1px solid #B2D2E1; +} +header h1 { + margin: 0; + padding: 0; + font-size: 24px; + line-height: 1.2; + color: #069; + text-shadow: rgba(255, 255, 255, 0.9) 0 1px 0; +} +header.without-description h1 { + margin: 10px 0; +} +header p { + margin: 0; + color: #61778B; + width: 300px; + font-size: 13px; +} +header p.view { + display: none; + font-weight: 700; + text-shadow: rgba(255, 255, 255, 0.9) 0 1px 0; + -webkit-font-smoothing: antialiased; +} +header p.view a { + color: #06c; +} +header p.view small { + font-weight: 400; +} +header ul { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + z-index: 1; + right: 20px; + top: 20px; + height: 38px; + padding: 1px 0; + background: #5198DF; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #77b9fb), color-stop(100%, #3782cd)); + background: -webkit-linear-gradient(#77b9fb, #3782cd); + background: -moz-linear-gradient(#77b9fb, #3782cd); + background: -o-linear-gradient(#77b9fb, #3782cd); + background: -ms-linear-gradient(#77b9fb, #3782cd); + background: linear-gradient(#77b9fb, #3782cd); + border-radius: 5px; + -webkit-box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0; + -moz-box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0; + box-shadow: inset rgba(255, 255, 255, 0.45) 0 1px 0, inset rgba(0, 0, 0, 0.2) 0 -1px 0; + width: auto; +} +header ul:before { + content: ''; + position: absolute; + z-index: -1; + left: -5px; + top: -4px; + right: -5px; + bottom: -6px; + background: rgba(0, 0, 0, 0.1); + -webkit-border-radius: 8px; + -moz-border-radius: 8px; + -ms-border-radius: 8px; + -o-border-radius: 8px; + border-radius: 8px; + -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0; + -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0; + box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 0, inset rgba(255, 255, 255, 0.7) 0 -1px 0; +} +header ul li { + width: 79px; + float: left; + border-right: 1px solid #3A7CBE; + height: 38px; +} +header ul li.single { + border: none; +} +header ul li + li { + width: 78px; + border-left: 1px solid #8BBEF3; +} +header ul li + li + li { + border-right: none; + width: 79px; +} +header ul a { + line-height: 1; + font-size: 11px; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + text-align: center; + font-weight: 400; + padding-top: 6px; + height: 40px; + text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0; +} +header ul a strong { + font-size: 14px; + display: block; + color: #fff; + -webkit-font-smoothing: antialiased; +} + +section { + padding: 15px 20px; + font-size: 15px; + border-top: 1px solid #fff; + background: -webkit-gradient(linear, 50% 0%, 50% 700, color-stop(0%, #fafafa), color-stop(100%, #dedede)); + background: -webkit-linear-gradient(#fafafa, #dedede 700px); + background: -moz-linear-gradient(#fafafa, #dedede 700px); + background: -o-linear-gradient(#fafafa, #dedede 700px); + background: -ms-linear-gradient(#fafafa, #dedede 700px); + background: linear-gradient(#fafafa, #dedede 700px); + -webkit-border-radius: 0 0 8px 8px; + -moz-border-radius: 0 0 8px 8px; + -ms-border-radius: 0 0 8px 8px; + -o-border-radius: 0 0 8px 8px; + border-radius: 0 0 8px 8px; + position: relative; +} + +h1, h2, h3, h4, h5, h6 { + color: #222; + padding: 0; + margin: 0 0 20px; + line-height: 1.2; +} + +p, ul, ol, table, pre, dl { + margin: 0 0 20px; +} + +h1, h2, h3 { + line-height: 1.1; +} + +h1 { + font-size: 28px; +} + +h2 { + color: #393939; +} + +h3, h4, h5, h6 { + color: #494949; +} + +blockquote { + margin: 0 -20px 20px; + padding: 15px 20px 1px 40px; + font-style: italic; + background: #ccc; + background: rgba(0, 0, 0, 0.06); + color: #222; +} + +img { + max-width: 100%; +} + +code, pre { + font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + color: #333; + font-size: 12px; + overflow-x: auto; +} + +pre { + padding: 20px; + background: #3A3C42; + color: #f8f8f2; + margin: 0 -20px 20px; +} +pre code { + color: #f8f8f2; +} +li pre { + margin-left: -60px; + padding-left: 60px; +} + +table { + width: 100%; + border-collapse: collapse; +} + +th, td { + text-align: left; + padding: 5px 10px; + border-bottom: 1px solid #aaa; +} + +dt { + color: #222; + font-weight: 700; +} + +th { + color: #222; +} + +small { + font-size: 11px; +} + +hr { + border: 0; + background: #aaa; + height: 1px; + margin: 0 0 20px; +} + +footer { + width: 640px; + margin: 0 auto; + padding: 20px 0 0; + color: #ccc; + overflow: hidden; +} +footer a { + color: #fff; + font-weight: bold; +} +footer p { + float: left; +} +footer p + p { + float: right; +} + +@media print, screen and (max-width: 740px) { + body { + padding: 0; + } + + .wrapper { + -webkit-border-radius: 0; + -moz-border-radius: 0; + -ms-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + width: 100%; + } + + footer { + -webkit-border-radius: 0; + -moz-border-radius: 0; + -ms-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; + padding: 20px; + width: auto; + } + footer p { + float: none; + margin: 0; + } + footer p + p { + float: none; + } +} +@media print, screen and (max-width:580px) { + header ul { + display: none; + } + + header p.view { + display: block; + } + + header p { + width: 100%; + } +} +@media print { + header p.view a small:before { + content: 'at http://github.com/'; + } +}