版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Murdock_C/article/details/49852351
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;
}
};