Skip to content

Commit 6759543

Browse files
committed
Merge branch 'main' of github.com:w2xi/leetcode
2 parents b945211 + 0cb887c commit 6759543

9 files changed

+235
-1
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
|53|[最大子数组和](https://leetcode.cn/problems/maximum-subarray/)|[JavaScript](./algorithms/maximum-subarray.js)|Easy|
4444
|54|[螺旋矩阵](https://leetcode.cn/problems/spiral-matrix/)|[JavaScript](./algorithms/spiral-matrix.js)|Medium|
4545
|55|[跳跃游戏](https://leetcode.cn/problems/jump-game/)|[JavaScript](./algorithms/jump-game.js)|Medium|
46+
|56|[合并区间](https://leetcode.cn/problems/merge-intervals/)|[JavaScript](./algorithms/merge-intervals.js)|Medium|
4647
|58|[最后一个单词的长度](https://leetcode.cn/problems/length-of-last-word/)|[JavaScript](./algorithms/length-of-last-word.js)|Easy|
4748
|59|[螺旋矩阵 II](https://leetcode.cn/problems/spiral-matrix-ii/)|[JavaScript](./algorithms/spiral-matrix-ii.js)|Medium|
4849
|66|[加一](https://leetcode-cn.com/problems/plus-one/)|[JavaScript](./algorithms/plus-one.js)|Easy|
@@ -138,13 +139,15 @@
138139
|409|[最长回文串](https://leetcode.cn/problems/longest-palindrome/)|[JavaScript](./algorithms/longest-palindrome.js)|Easy|
139140
|412|[Fizz Buzz](https://leetcode.cn/problems/fizz-buzz/)|[JavaScript](./algorithms/fizz-buzz.js)|Easy|
140141
|414|[第三大的数](https://leetcode.cn/problems/third-maximum-number/)|[JavaScript](./algorithms/third-maximum-number.js)|Easy|
141-
|442|[数组中重复的数据](https://leetcode.cn/problems/find-all-duplicates-in-an-array/)|[JavaScript](./algorithms/find-all-duplicates-in-an-array.js)|Medium|
142142
|429|[N 叉树的层序遍历](https://leetcode.cn/problems/n-ary-tree-level-order-traversal/)|[JavaScript](./algorithms/n-ary-tree-level-order-traversal.js)|Medium|
143143
|434|[字符串中的单词数](https://leetcode.cn/problems/number-of-segments-in-a-string/)|[JavaScript](./algorithms/number-of-segments-in-a-string.js)|Easy|
144+
|435|[无重叠区间](https://leetcode.cn/problems/non-overlapping-intervals/)|[JavaScript](./algorithms/non-overlapping-intervals.js)|Medium|
144145
|437|[路径总和 III](https://leetcode.cn/problems/path-sum-iii/)|[JavaScript](./algorithms/path-sum-iii.js)|Medium|
146+
|442|[数组中重复的数据](https://leetcode.cn/problems/find-all-duplicates-in-an-array/)|[JavaScript](./algorithms/find-all-duplicates-in-an-array.js)|Medium|
145147
|448|[找到所有数组中消失的数字](https://leetcode.cn/problems/find-all-numbers-disappeared-in-an-array/)|[JavaScript](./algorithms/find-all-numbers-disappeared-in-an-array.js)|Easy|
146148
|450|[删除二叉搜索树中的节点](https://leetcode.cn/problems/delete-node-in-a-bst/)|[JavaScript](./algorithms/delete-node-in-a-bst.js)|Medium|
147149
|451|[根据字符出现频率排序](https://leetcode.cn/problems/sort-characters-by-frequency/)|[JavaScript](./algorithms/sort-characters-by-frequency.js)|Medium|
150+
|452|[用最少数量的箭引爆气球](https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/)|[JavaScript](./algorithms/minimum-number-of-arrows-to-burst-balloons.js)|Medium|
148151
|453|[最小操作次数使数组元素相等](https://leetcode.cn/problems/minimum-moves-to-equal-array-elements/)|[JavaScript](./algorithms/minimum-moves-to-equal-array-elements.js)|Easy|
149152
|454|[四数相加 II](https://leetcode.cn/problems/4sum-ii/)|[JavaScript](./algorithms/4sum-ii.js)|Medium|
150153
|455|[分发饼干](https://leetcode.cn/problems/assign-cookies/)|[JavaScript](./algorithms/assign-cookies.js)|Easy|
@@ -154,6 +157,7 @@
154157
|498|[对角线遍历](https://leetcode.cn/problems/diagonal-traverse/)|[JavaScript](./algorithms/diagonal-traverse.js)|Medium|
155158
|501|[二叉搜索树中的众数](https://leetcode.cn/problems/find-mode-in-binary-search-tree/)|[JavaScript](./algorithms/find-mode-in-binary-search-tree.js)|Easy|
156159
|506|[相对名次](https://leetcode.cn/problems/relative-ranks/)|[JavaScript](./algorithms/relative-ranks.js)|Easy|
160+
|508|[出现次数最多的子树元素和](https://leetcode.cn/problems/most-frequent-subtree-sum/)|[JavaScript](./algorithms/most-frequent-subtree-sum.js)|Medium|
157161
|509|[斐波那契数](https://leetcode.cn/problems/fibonacci-number/)|[JavaScript](./algorithms/fibonacci-number.js)|Easy|
158162
|513|[找树左下角的值](https://leetcode.cn/problems/find-bottom-left-tree-value/)|[JavaScript](./algorithms/find-bottom-left-tree-value.js)|Medium|
159163
|515|[在每个树行中找最大值](https://leetcode.cn/problems/find-largest-value-in-each-tree-row/)|[JavaScript](./algorithms/find-largest-value-in-each-tree-row.js)|Medium|
@@ -188,6 +192,9 @@
188192
|701|[二叉搜索树中的插入操作](https://leetcode.cn/problems/insert-into-a-binary-search-tree/)|[JavaScript](./algorithms/insert-into-a-binary-search-tree.js)|Medium|
189193
|704|[二分查找](https://leetcode.cn/problems/binary-search/)|[JavaScript](./algorithms/binary-search.js)|Easy|
190194
|707|[设计链表](https://leetcode.cn/problems/design-linked-list/)|[JavaScript](./algorithms/design-linked-list.js)|Medium|
195+
|714|[买卖股票的最佳时机含手续费](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/)|[JavaScript](./algorithms/best-time-to-buy-and-sell-stock-with-transaction-fee.js)|Medium|
196+
|738|[单调递增的数字](https://leetcode.cn/problems/monotone-increasing-digits/)|[JavaScript](./algorithms/monotone-increasing-digits.js)|Medium|
197+
|763|[划分字母区间](https://leetcode.cn/problems/partition-labels/)|[JavaScript](./algorithms/partition-labels.js)|Medium|
191198
|844|[比较含退格的字符串](https://leetcode.cn/problems/backspace-string-compare/)|[JavaScript](./algorithms/backspace-string-compare.js)|Easy|
192199
|860|[柠檬水找零](https://leetcode.cn/problems/lemonade-change/)|[JavaScript](./algorithms/lemonade-change.js)|Easy|
193200
|876|[链表的中间结点](https://leetcode.cn/problems/middle-of-the-linked-list/)|[JavaScript](./algorithms/middle-of-the-linked-list.js)|Easy|
@@ -231,6 +238,7 @@
231238
|2341|[数组能形成多少数对](https://leetcode.cn/problems/maximum-number-of-pairs-in-array/)|[JavaScript](./algorithms/maximum-number-of-pairs-in-array.js)|Easy|
232239
|2351|[第一个出现两次的字母](https://leetcode.cn/problems/first-letter-to-appear-twice/)|[JavaScript](./algorithms/first-letter-to-appear-twice.js)|Easy|
233240
|6354|[找出数组的串联值](https://leetcode.cn/problems/find-the-array-concatenation-value/)|[JavaScript](./algorithms/find-the-array-concatenation-value.js)|Easy|
241+
|6362|[合并两个二维数组 - 求和法](https://leetcode.cn/problems/merge-two-2d-arrays-by-summing-values/)|[JavaScript]()|Easy|
234242
|面试题 04.12|[面试题 04.12. 求和路径](https://leetcode.cn/problems/paths-with-sum-lcci/)|[JavaScript](./algorithms/paths-with-sum-lcci.js)|Medium|
235243
|面试题 02.07|[面试题 02.07. 链表相交](https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/)|[JavaScript](./algorithms/intersection-of-two-linked-lists-lcci.js)|Easy|
236244
|剑指 Offer 05. 替换空格|[剑指 Offer 05. 替换空格](https://leetcode.cn/problems/ti-huan-kong-ge-lcof/)|[JavaScript](./algorithms/ti-huan-kong-ge-lcof.js)|Easy|
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @param {number[]} prices
3+
* @param {number} fee
4+
* @return {number}
5+
*/
6+
var maxProfit = function (prices, fee) {
7+
let minPrice = prices[0];
8+
let result = 0;
9+
10+
for (let i = 1; i < prices.length; i++) {
11+
const curr = prices[i];
12+
if (minPrice > curr) {
13+
minPrice = curr;
14+
}
15+
if (curr - minPrice > fee) {
16+
result += curr - minPrice - fee;
17+
minPrice = curr - fee;
18+
}
19+
}
20+
21+
return result;
22+
};

algorithms/merge-intervals.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* 56. 合并区间
3+
* @param {number[][]} intervals
4+
* @return {number[][]}
5+
*/
6+
var merge = function (intervals) {
7+
if (intervals.length === 1) {
8+
return intervals;
9+
}
10+
const result = [];
11+
intervals.sort((a, b) => a[0] - b[0]);
12+
13+
for (let i = 1; i < intervals.length; i++) {
14+
if (intervals[i][0] <= intervals[i - 1][1]) {
15+
// 重叠
16+
intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]);
17+
intervals[i][0] = intervals[i - 1][0];
18+
} else {
19+
result.push(intervals[i - 1]);
20+
}
21+
}
22+
23+
result.push(intervals[intervals.length - 1]); // 总是 push 最后一个元素
24+
25+
return result;
26+
};
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @param {number[][]} nums1
3+
* @param {number[][]} nums2
4+
* @return {number[][]}
5+
*/
6+
var mergeArrays = function (nums1, nums2) {
7+
let left1 = 0;
8+
let right1 = nums1.length - 1;
9+
let left2 = 0;
10+
let right2 = nums2.length - 1;
11+
12+
const result = [];
13+
14+
// 思路和合并两个有序数组一样
15+
16+
while (left1 <= right1 && left2 <= right2) {
17+
const curr1 = nums1[left1];
18+
const curr2 = nums2[left2];
19+
20+
if (curr1[0] < curr2[0]) {
21+
result.push(curr1);
22+
left1++;
23+
} else if (curr1[0] > curr2[0]) {
24+
result.push(curr2);
25+
left2++;
26+
} else {
27+
result.push([curr1[0], curr1[1] + curr2[1]]);
28+
left1++;
29+
left2++;
30+
}
31+
}
32+
if (left1 > right1) {
33+
result.push(...nums2.slice(left2));
34+
} else {
35+
result.push(...nums1.slice(left1));
36+
}
37+
38+
return result;
39+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {number[][]} points
3+
* @return {number}
4+
*/
5+
var findMinArrowShots = function (points) {
6+
points.sort((a, b) => a[0] - b[0]);
7+
8+
let result = 1; // points 为空至少需要一只箭
9+
10+
for (let i = 1; i < points.length; i++) {
11+
if (points[i][0] <= points[i - 1][1]) {
12+
// 更新重叠气球最小右边界
13+
points[i][1] = Math.min(points[i][1], points[i - 1][1]);
14+
} else {
15+
result++;
16+
}
17+
}
18+
19+
return result;
20+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var monotoneIncreasingDigits = function (n) {
6+
let s = String(n);
7+
let end = s.length - 1;
8+
let temp = 0;
9+
10+
for (let i = end; i > 0; i--) {
11+
if (s[i] < s[i - 1]) {
12+
temp = +s.slice(i) + 1;
13+
s = String(s - temp);
14+
}
15+
}
16+
return +s;
17+
};
18+
19+
var monotoneIncreasingDigits = function (n) {
20+
const arr = String(n).split("");
21+
let index = arr.length;
22+
23+
for (let i = arr.length - 1; i > 0; i--) {
24+
if (arr[i] < arr[i - 1]) {
25+
index = i;
26+
arr[i - 1]--;
27+
}
28+
}
29+
for (let i = index; i < arr.length; i++) {
30+
arr[i] = "9";
31+
}
32+
return +arr.join("");
33+
};
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
* 508. 出现次数最多的子树元素和
11+
* @param {TreeNode} root
12+
* @return {number[]}
13+
*/
14+
var findFrequentTreeSum = function (root) {
15+
const map = new Map();
16+
const result = [];
17+
let maxCount = 0; // 最大出现次数
18+
19+
const dfs = (root) => {
20+
if (!root) return 0;
21+
const left = dfs(root.left);
22+
const right = dfs(root.right);
23+
const val = left + right + root.val;
24+
25+
map.set(val, (map.get(val) || 0) + 1); // 记录次数
26+
maxCount = Math.max(maxCount, map.get(val));
27+
28+
return val;
29+
};
30+
dfs(root);
31+
32+
map.forEach((count, val) => {
33+
if (count === maxCount) {
34+
result.push(val);
35+
}
36+
});
37+
38+
return result;
39+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* 435. 无重叠区间
3+
* @param {number[][]} intervals
4+
* @return {number}
5+
*/
6+
var eraseOverlapIntervals = function (intervals) {
7+
if (intervals.length === 1) return 0;
8+
let result = 0;
9+
intervals.sort((a, b) => a[0] - b[0]);
10+
11+
for (let i = 1; i < intervals.length; i++) {
12+
if (intervals[i][0] < intervals[i - 1][1]) {
13+
intervals[i][1] = Math.min(intervals[i - 1][1], intervals[i][1]);
14+
result++;
15+
}
16+
}
17+
18+
return result;
19+
};

algorithms/partition-labels.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* 763. 划分字母区间
3+
* @param {string} s
4+
* @return {number[]}
5+
*/
6+
var partitionLabels = function (s) {
7+
const map = Array(26).fill(0);
8+
const result = [];
9+
let start = 0; // 片段的起始位置
10+
let end = 0; // 片段的结束位置
11+
12+
for (let i = 0; i < s.length; i++) {
13+
const index = s[i].charCodeAt() - 97;
14+
map[index] = i; // 记录字符最后出现的索引位置
15+
}
16+
for (let i = 0; i < s.length; i++) {
17+
const index = s[i].charCodeAt() - 97;
18+
end = Math.max(end, map[index]);
19+
20+
if (end === i) {
21+
// 说明后面的片段没有出现重复的字母了
22+
result.push(end - start + 1);
23+
start = end + 1; // 更新起始位置
24+
}
25+
}
26+
27+
return result;
28+
};

0 commit comments

Comments
 (0)