您的位置:首页 > 其它

LeetCode-4Sum

2013-07-12 20:43 330 查看
类似于3Sum,固定两个指针,然后让另外两个指针指向剩余元素的头和尾,开始向中间靠拢。时间复杂度是O(n^3).

class Solution {
public:
vector<vector<int> > fourSum(vector<int> &num, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > vec;
if (num.size() < 4)
return vec;
sort(num.begin(), num.end());
for (vector<int>::size_type i = 0; i < num.size() - 3; ++i)
{
if (num[i] > target && target >= 0)
break;
for (vector<int>::size_type j = i + 1; j < num.size() - 2; ++j)
{
int sum2 = num[i] + num[j];
if (sum2 > target && target >= 0)
break;
vector<int>::size_type k = j + 1, m = num.size() - 1;
while (k < m)
{
int sum4 = sum2 + num[k] + num[m];
if (sum4 == target)
{
vector<int> vec1;
vec1.push_back(num[i]);
vec1.push_back(num[j]);
vec1.push_back(num[k]);
vec1.push_back(num[m]);
vec.push_back(vec1);
while (k < m && num[k] == num[k + 1])
++k;
while (m > k && num[m] == num[m - 1])
--m;
++k;
--m;
}
else if (sum4 > target)
{
--m;
}
else
{
++k;
}
}
while (j < num.size() - 2 && num[j] == num[j + 1])
++j;
}
while (i < num.size() - 3 && num[i] == num[i + 1])
++i;
}
return vec;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: