leetcode 18. 四数之和 medium
题目描述:
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。
解题思路:
和三数之和一样的思想
代码:
//
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
if (nums.size() < 4)
return {};
vector<vector<int>> res;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i++)
{
if (i > 0 && nums[i] == nums[i-1])
continue;
for(int j = i+1; j < nums.size(); j++)
{
if (j > i+1 && nums[j] == nums[j-1])
continue;
int m = j+1, n = nums.size() -1;
while (m < n)
{
if (m > j+1 && nums[m] == nums[m-1])
{
m++;
continue;
}
long long one = (long long )nums[i] + nums[j] + nums[m] + nums[n];
if (one == target)
{
res.push_back({nums[i], nums[j], nums[m], nums[n]});
m++;
n--;
}
else if (one > target)
n--;
else
m++;
}
}
}
return res;
}
};