您的位置:首页 > 其它

[LeetCode]4Sum

2015-10-03 13:29 375 查看
题目描述:(链接)

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note:

Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)

The solution set must not contain duplicate quadruplets.

For example, given array S = {1 0 -1 0 -2 2}, and target = 0.

A solution set is:
(-1,  0, 0, 1)
(-2, -1, 1, 2)
(-2,  0, 0, 2)


解题思路:

排序,左右夹逼!但是时间复杂度O(n^3),哎,待续!

class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> result;
if (nums.size() < 4) { return result;}
sort(nums.begin(), nums.end());

auto last = nums.end();

for (auto i = nums.begin(); i != last - 3; ++i) {
for (auto j = i + 1; j != last - 2; ++j) {
auto k = j + 1;
auto m = last - 1;
while (k < m) {
int sum = *i + *j + *k + *m;
if (sum < target) {
++k;
} else if(sum > target) {
--m;
} else {
result.push_back({*i, *j, *k, *m});
++k;
--m;
}
}

}
}
sort(result.begin(), result.end());
result.erase(unique(result.begin(), result.end()), result.end());

return result;
}
};


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