For this problem, do not forget to skip the duplicates for i. Usually I will do duplication removal for j and k.
Tag it.
1 class Solution { 2 public: 3 vector> threeSum(vector &num) { 4 vector > result; 5 int len = num.size(), i = 0, j = 0, k = 0; 6 if (len < 2) return result; 7 sort(num.begin(), num.end()); 8 for (int i = 0; i < len-2; i++) { 9 if (i > 0 && num[i] == num[i-1]) continue;10 j = i+1, k = len-1;11 while (j < k) {12 int sum = num[i] + num[j] + num[k];13 if (sum > 0) k--;14 else if (sum < 0) j++;15 else {16 vector tmp;17 tmp.push_back(num[i]);18 tmp.push_back(num[j]);19 tmp.push_back(num[k]);20 result.push_back(tmp);21 do{j++;} while (j < k && num[j] == num[j-1]);22 do{k--;} while (j < k && num[k] == num[k+1]);23 }24 }25 }26 return result;27 }28 };