leetcode-三數之和
阿新 • • 發佈:2021-07-15
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; } };