LeetCode 3Sum
阿新 • • 發佈:2018-11-08
leetCode 3sum問題,和LeetCode第一個Two Sum問題很像,首先對陣列nums進行排序,然後從第一個開始,將值設為類似於Two Sum的target,然後按照首尾查詢的方法,時間複雜度很快。另外需要注意的是nums中重複的要注意忽略掉。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector <int>> results;
int a;
int sum;
for (int i=0; i<nums.size(); ++i)
{
if (i>0 && nums[i]==nums[i-1]) continue;
a = nums[i];
int begin = i+1;
int end = nums.size()-1;
while (begin < end)
{
sum = nums[begin] + nums[end];
if (sum + a > 0) --end;
else if (sum + a < 0) ++begin;
else
{
results.push_back(vector<int>{nums[i], nums[begin], nums[end]});
while (nums[begin] == nums[begin+1]) ++begin;
while (nums[end] == nums[end-1 ]) --end;
++begin;
--end;
}
}
}
return results;
}
};