Skip to content

Commit 753a605

Browse files
committed
finish 0053
1 parent 667f5eb commit 753a605

9 files changed

+144
-28
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ since 2021.10.10 / Benben
2828
- 0027.Remove Element
2929
- 0028.Implement strStr()
3030
- 0035.Search Insert Position
31-
- 0053.Maximum SubArray (FIXME)
31+
- 0053.Maximum SubArray
3232
- 0104.Maximum Depth of Binary Tree
3333
- 0111.Minimum Depth of Binary Tree
3434
- 0144.Binary Tree PreOrder Traversal
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
*/
6+
var searchInsert = function(nums, target) {
7+
let left = 0
8+
let right = nums.length - 1
9+
let mid = 0
10+
11+
if (target <= nums[left]) return 0
12+
if (target > nums[right]) return nums.length
13+
if (target === nums[right]) return nums.length - 1
14+
15+
while (left <= right) {
16+
mid = Math.floor((left + right) / 2)
17+
18+
if (target === nums[mid]) return mid
19+
20+
if (target > nums[mid]) {
21+
left = mid + 1
22+
} else {
23+
right = mid - 1
24+
}
25+
}
26+
if (target > nums[mid] && target < nums[mid + 1]) return mid + 1
27+
return mid
28+
};
29+
30+
31+
// leetcode 0035

interview/50/02-reverseBetween.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val, next) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.next = (next===undefined ? null : next)
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode} head
10+
* @param {number} left
11+
* @param {number} right
12+
* @return {ListNode}
13+
*/
14+
var reverseBetween = function(head, left, right) {
15+
let successor = null
16+
17+
const reverseN = (head, n) => {
18+
if (n === 1) {
19+
successor = head.next
20+
return head
21+
}
22+
const last = reverseN(head.next, n - 1)
23+
head.next.next = head
24+
head.next = successor
25+
return last
26+
}
27+
28+
const doReverse = (head, left, right) => {
29+
if (left === 1) {
30+
return reverseN(head, right)
31+
}
32+
head.next = doReverse(head.next, left - 1, right - 1)
33+
return head
34+
}
35+
return doReverse(head, left, right)
36+
};
37+
38+
// leetcode 0092
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @return {number}
12+
*/
13+
var diameterOfBinaryTree = function(root) {
14+
let maxDiameter = 0
15+
16+
const traverse = (root) => {
17+
if (!root) return 0
18+
19+
let leftLength = traverse(root.left)
20+
let rightLength = traverse(root.right)
21+
22+
maxDiameter = Math.max(maxDiameter, leftLength + rightLength)
23+
24+
return 1 + Math.max(leftLength, rightLength)
25+
}
26+
traverse(root)
27+
28+
return maxDiameter
29+
};
30+
31+
// leetcode 0543

interview/50/04-mergeKSortedLists.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
// leetcode 0023
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
// leetcode 1171

interview/50/06-maximumSubarray.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var maxSubArray = function(nums) {
6+
if (nums.length === 0) return nums
7+
8+
let cur = nums[0]
9+
let curMax = 0
10+
let res = cur
11+
12+
for (let i = 1; i < nums.length; i++) {
13+
curMax = Math.max(nums[i], cur + nums[i])
14+
cur = curMax
15+
res = Math.max(res, curMax)
16+
}
17+
18+
return res
19+
}
20+
21+
// leetcode 0053

leetcode-easy/0035-search-insert-position.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ var searchInsert = function(nums, target) {
77
let left = 0
88
let right = nums.length - 1
99
let mid = 0
10-
10+
1111
if (target <= nums[left]) return 0
1212
if (target > nums[right]) return nums.length
1313
if (target === nums[right]) return nums.length - 1
14-
14+
1515
while (left <= right) {
1616
mid = Math.floor((left + right) / 2)
17-
17+
1818
if (target === nums[mid]) return mid
19-
19+
2020
if (target > nums[mid]) {
2121
left = mid + 1
2222
} else {

leetcode-easy/0053-maximum-subarray.js

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,21 @@
33
* @return {number}
44
*/
55
var maxSubArray = function(nums) {
6-
const { length } = nums
7-
if (length === 1) return nums[0]
8-
9-
const resultArr = []
10-
for (let i = 1; i < length + 1; i++) {
11-
resultArr.push(maxSum(nums, i))
12-
}
13-
return Math.max(...resultArr)
14-
};
6+
if (nums.length === 0) return nums
157

16-
const maxSum = (nums, size) => {
17-
let maxValue = 0
18-
for (let i = 0; i < size; i++) {
19-
maxValue += nums[i]
20-
}
8+
let cur = nums[0]
9+
let curMax = 0
10+
let res = cur
2111

22-
let tempValue = maxValue
23-
for (let j = size; j < nums.length; j++) {
24-
tempValue = tempValue + nums[j] - nums[j - size]
25-
if (tempValue > maxValue) {
26-
maxValue = tempValue
27-
}
12+
for (let i = 1; i < nums.length; i++) {
13+
curMax = Math.max(nums[i], cur + nums[i])
14+
cur = curMax
15+
res = Math.max(res, curMax)
2816
}
29-
return maxValue
30-
}
3117

32-
// TO FIX
18+
return res
19+
};
20+
21+
// 2022/05/09 done.
22+
// Runtime: 109 ms, faster than 48.46% of JavaScript online submissions for Maximum Subarray.
23+
// Memory Usage: 50.4 MB, less than 48.90% of JavaScript online submissions for Maximum Subarray.

0 commit comments

Comments
 (0)