vector<vector<int> > threeSum(vector<int> &num) { sort(num.begin(), num.end()); vector<vector<int> > result; for (int i = 0; i < num.size(); ++i) { if (i > 0 && num[i] == num[i - 1]) continue; vector<vector<int> > p = twoSumSorted(num, i + 1, num.size() - 1, -num[i]); for (int j = 0; j < p.size(); ++j) { p[j].insert(p[j].begin(), num[i]); result.push_back(p[j]); } } return result; }
vector<int> twoSum(vector<int>& nums, int target) { vector<int> nums1 = nums; std::sort(nums1.begin(), nums1.end(), less<int>()); vector<int> tmp = twoSumSorted(nums1, target); vector<int> ret(2, -1); bool flag = false; for (int i_ = 0; i_ < nums.size(); ++i_){ if (nums[i_] == tmp[0] && !flag) { ret[0] = i_ + 1; flag = true; } else if (nums[i_] == tmp[1]) { ret[1] = i_ + 1; } } if(ret[0] > ret[1]) swap(ret[0], ret[1]); return ret; }