广州仿站定制模板建站,徐汇做网站公司,网站建设价格多少,百度资源搜索平台官网1. 题目 给你一个由 n 个整数组成的数组 nums #xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] #xff08;若两个四元组元素一一对应#xff0c;则认为两个四元组重复#xff09;#xff1a; 0 …1. 题目 给你一个由 n 个整数组成的数组 nums 和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] 若两个四元组元素一一对应则认为两个四元组重复 0 a, b, c, d na、b、c 和 d 互不相同nums[a] nums[b] nums[c] nums[d] target 你可以按 任意顺序 返回答案 。 2. 示例 3. 分析
做这题之前先做这道三数之和对应题解三数之和 - 题解
四数之和无非就是再多套一层循环即再增加一个固定数。之后就利用双指针寻找 两数之和 target - 第一个固定数 - 第二个固定数
class Solution {
public:vectorvectorint fourSum(vectorint nums, int target) {sort(nums.begin(), nums.end());vectorvectorint ret;int n nums.size();for(int i 0; i n;) // 第一个固定数{for(int j i 1; j n;) // 第二个固定数{// 双指针int left j 1, right n - 1;long long aim (long long)target - nums[i] - nums[j];while(left right){int sum nums[left] nums[right];if(sum aim) right--;else if(sum aim) left;else{ret.push_back({nums[i], nums[j], nums[left], nums[right--]});while(left right nums[left] nums[left-1]) left; // 去重左指针元素while(right right nums[right] nums[right1]) right--; // 去重右指针元素}}j;while(j n nums[j] nums[j-1]) j; // 去重第二个固定数指针元素}i;while(i n nums[i] nums[i-1]) i; // 去重第一个固定数指针元素}return ret;}
};