Skip to content

Commit 1e70c40

Browse files
committed
剑指 Offer II 007. 数组中和为 0 的三个数
1 parent 0f084e6 commit 1e70c40

File tree

1 file changed

+37
-0
lines changed
  • lcof2/剑指 Offer II 007. 数组中和为 0 的三个数

1 file changed

+37
-0
lines changed

lcof2/剑指 Offer II 007. 数组中和为 0 的三个数/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,43 @@
5050

5151
<!-- tabs:start -->
5252

53+
### **Cyrus**
54+
55+
```javascript
56+
/**
57+
* 理解:三数之和的本质其实是【两数之和 twoSum】加多一个变量
58+
* 两数之和关键点:排序、头尾双指针往中间逼近
59+
* 所以这里首先排序,然后固定住 x,那么 y 和 z 其实就是两数之和的算法模板
60+
* 注意去重
61+
* @param {number[]} nums
62+
* @return {number[][]}
63+
*/
64+
var threeSum = function(nums) {
65+
var ret = new Array();
66+
if (!nums || nums.length < 3) return ret;
67+
68+
nums.sort((l, r) => l - r);
69+
for (let i = 0; i < nums.length - 2;) {
70+
for (let j = i + 1, k = nums.length - 1; j < k;) {
71+
let sum = nums[i] + nums[j] + nums[k];
72+
73+
if (sum < 0) {
74+
j++;
75+
} else if (sum > 0) {
76+
k--;
77+
} else {
78+
ret.push([nums[i], nums[j], nums[k]]);
79+
for (let diff = nums[j]; diff == nums[j] && j < k; j++) {}
80+
for (let diff = nums[k]; diff == nums[k] && j < k; k--) {}
81+
}
82+
}
83+
for (let diff = nums[i]; diff == nums[i] && i < nums.length - 2; i++) {}
84+
}
85+
86+
return ret;
87+
};
88+
```
89+
5390
### **Python3**
5491

5592
<!-- 这里可写当前语言的特殊实现逻辑 -->

0 commit comments

Comments
 (0)