您的位置:首页 > 其它

leetcode 15. 3Sum

2016-02-24 22:46 169 查看

题意

查找三个相加为0的数,且不重复。

题解

将数组排序后,枚举两个不重复的元素A和B,然后二分查找剩余-(A+B)。

代码

class Solution {
public:
int binary_search(vector<int>& nums, int left, int right, int target)
{
while (left <= right)
{
int mid = (left + right) / 2;
if (nums[mid] > target)
right = mid - 1;
else if (nums[mid] < target)
left = mid + 1;
else
return mid;

}
return -1;
}
int skip(vector<int>& nums, int i)
{
int size = nums.size();
while (i > 0 && i < size && nums[i] == nums[i - 1])
i++;
return i;
}
vector<vector<int> > threeSum(vector<int>& nums)
{
set<vector<int> > result_set;
vector<vector<int> > result;
int size = nums.size();

sort(nums.begin(), nums.end());

for (int i = 0; i < size; i++)
{
i = skip(nums, i);
for (int j = i + 1; j < size; j++)
{

int twoSum = nums[i] + nums[j];
int index = -1;
if ((index = binary_search(nums, j + 1, size - 1, -twoSum)) >= 0)
{
vector<int> temp;
temp.push_back(nums[i]);
temp.push_back(nums[j]);
temp.push_back(nums[index]);
result.push_back(temp);
while (j > 0 && j < size - 1 && nums[j] == nums[j + 1]) // skip the repeated eles
j++;
}
}

}

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: