LeetCode 15. 3Sum
原题链接
任何一个算法代码实现十六字真言:
有法可依, 有法必依, 执法必严, 违法必究.
闲话
法就是算法, 就是逻辑, 就是Logos.
太初有道,道与神同在,道就是神。
有法可依: 有法可依
有法必依: 喜欢我暴力吗🤠
执法必严: 默写跟着逻辑走, 不是跟着记忆力走, 不是记自己之前写过好多次是怎么写的, 这里好像要加个什么
违法必究: 人肉 Debug 时把逻辑跑一遍
「十六字真言」真灵啊!
一周目
is Bad End 给默写哥幽默完了.
// 收缩+双指针
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> res;
int n = nums.size();
for (int i = 0; i < n - 2; ++i){
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int x = nums[i], j = i + 1, k = n - 1;
if (x + nums[i + 1] + nums[i + 2] > 0) {
break;
}
if (x + nums[k] + nums[k - 1] < 0) {
continue;
}
while (j < k) {
int s = x + nums[j] + nums[k];
if (s < 0) {
++j;
} else if (s > 0) {
--k;
} else {
res.push_back(vector<int>{x, nums[j], nums[k]});
++j;
--k;
while (j < k && nums[j] == nums[j - 1]) {
++j;
}
while (j < k && nums[k] == nums[k + 1]) {
--k;
}
}
}
}
return res;
}
};