https://leetcode-cn.com/problems/3sum/
1. 题意

2. 思路
首先暴力的做法是n的3次方,肯定过不了,那就要想如何优化,通常优化会想到二分之类的…….这题显然不是二分,那么可以想到双指针,看是否符合单调性,可以发现是适合的,那么排序后使用双指针的做法可以解决。
注意:
这里是不能有重复的,要做一些特殊的判断
3. 题解
#include<bits/stdc++.h>using namespace std;class Solution {public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> vec;sort(nums.begin(),nums.end());auto func = [&](int a ,int b, int c) -> int{return a + b + c;};auto check = [&](long a ,long b, long c) -> bool{if(a==b){return false;}else if(a==c){return false;}else if(b==c){return false;}return true;};for(long i = 0 ;i < nums.size() ; i ++) {if(i&&nums[i] == nums[i-1]) continue;for(long j = i + 1 ,k = nums.size() -1 ; j < nums.size() ;j ++) {if(j > i + 1 && nums[j] == nums[j-1]) continue;while(k > j && func(nums[i] ,nums[j],nums[k]) > 0) {k --;}if(check(i,j,k)&&func(nums[i] ,nums[j],nums[k]) == 0 ) {vec.push_back({nums[i],nums[j],nums[k]});}}}return vec;}};int main(){Solution solution;vector<int>vec{-0,0,0,0};solution.threeSum(vec);return 0;}
