leetcode-三数之和
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; if(nums.size()<3) return res; sort(nums.begin(), nums.end()); for(int i = 0; i < nums.size(); i++){ if(nums[i]>0) break; if((i-1)>=0&&nums[i] == nums[i-1]) // 后面的元素和前面的重复,直接跳过 continue; int m = i+1; int n = nums.size()-1; while(m<n){ if(nums[m]+nums[n]>(-nums[i])) n--; else if(nums[m]+nums[n]<(-nums[i])) m++; else{ vector<int> temp; while(m<n&&nums[m+1]==nums[m]) // 右边如果有重复元素直接左移一位 m++; while(m<n&&nums[n-1] == nums[n]) // 左边有重复元素直接右移一位 n--; temp.push_back(nums[i]); temp.push_back(nums[m]); temp.push_back(nums[n]); res.push_back(temp); m++; n--; } } } return res; } };