题目考察的知识点:双指针
题目解答方法的文字分析:暴力遍历,求出每种可能,符合条件则保留;可以优化一下,如:a[i]>target,则break;a[i]+b[j]>target,则break。
本题解析所用的编程语言:c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型vector<vector<>>
*/
vector<vector<int> > fourSum(vector<int>& nums, int target)
{
// write code here
vector<vector<int>> ret;
sort(nums.begin(), nums.end());
for (int a = 0; a < nums.size() - 3; ++a)
for (int b = a + 1; b < nums.size() - 2; ++b)
for (int c = b + 1; c < nums.size() - 1; ++c)
for (int d = c + 1; d < nums.size(); ++d)
{
vector<int> t(4);
t[0] = nums[a],t[1] = nums[b],t[2] = nums[c],t[3] = nums[d];
if (t[0] + t[1] + t[2] + t[3] == target)
if (ret.empty() || ret[ret.size() - 1] != t)
ret.push_back(t);
else if (t[0] + t[1] + t[2] + t[3] > target)
break;
}
return ret;
}
};

京公网安备 11010502036488号