题解 | #三数之和#
三数之和
https://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
sort(num.begin(), num.end());
vector<vector<int> > res;
int n = num.size();
for (int l = 0; l < n - 2; ++l) {
if (l > 0 && num[l] == num[l - 1]) {
continue;
}
int target = -num[l];
for (int m = l + 1, r = n - 1; m < r; ) {
if (m > l + 1 && num[m] == num[m - 1]) {
++m;
continue;
}
if (r < n - 1 && num[r] == num[r + 1]) {
--r;
continue;
}
if (num[m] + num[r] < target) {
++m;
} else if (num[m] + num[r] > target) {
--r;
} else {
res.push_back({num[l], num[m], num[r]});
++m;
--r;
}
}
}
return res;
}
};
思路:三指针法。
先排序,然后三指针。
注意去重。

