4sum

来源:互联网 发布:剑灵力士卡刀软件 编辑:程序博客网 时间:2024/05/29 15:26

题目:

点击打开链接

解答:

参考网上的一份比较标准的代码。

做法: 先转化为求3sum  然后再转化为求2sum

通过只从小到大搜索,跳过重复元素,来达到避免结果重复的目的。

代码:

 class Solution { public: vector<vector<int> >  fourSum(vector<int> &num, int target) { int i, j, k, l, sum; vector<int> temp; vector<vector<int> > res; sort(num.begin(), num.end()); for (i = 0; i < num.size(); i++) { if (i != 0 && num[i] == num[i - 1]) continue; //为什么要j = i+1; 因为元素从小到大排列 //所以从小到大进行查找,肯定不会遗漏元素。 for (j = i + 1; j < num.size(); j++) { if (j != i + 1 && num[j] == num[j - 1]) continue; k = j + 1; l = num.size() - 1; while(k<l) { sum = num[i] + num[j] + num[k] + num[l]; if (target > sum) { ++k; } else if (target < sum) { --l; } //在这里避免重复元素 else if (k != j + 1 && num[k] == num[k - 1]) { ++k; } //在这里避免重复元素 else if (l != num.size() - 1 && num[l] == num[l + 1]) { --l; } else { temp.clear(); temp.push_back(num[i]); temp.push_back(num[j]); temp.push_back(num[k]); temp.push_back(num[l]); res.push_back(temp); ++k; --l; } } } } return res; } };


0 0
原创粉丝点击