class Solution { public: vector<vector<int> > threeSum(vector<int> &num) { int len = num.size(); if(len < 3) return {}; vector<vector<int>> res; sort(num.begin(), num.end()); for(int i=0; i<len-2; i++) { // 对 i去重,有重复的话,只输出一次 while(i>0 && num[i]==num[i-1]) i++; int left = i+1; int right = len-1; while(left < right) { if(num[i]+num[left]+num[right] == 0) { res.push_back({num[i], num[left], num[right]}); // 对 left和 right去重。 while(right<len && num[right]==num[right-1]) right--; while(left>i && num[left]==num[left+1]) left++; // 更新 left和 right left++; right--; } else if(num[i]+num[left]+num[right] < 0) { left++; } else { right--; } } } return res; } };