18LC
18. 四数之和(两个指针)
题目: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
满足要求的四元组集合为:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
//先确定前面数字,最后双指针,(一步步缩小问题规模,三数->二数)
class Solution {
public:vector> fourSum(vector& nums, int target) {vector >res;sort(nums.begin(),nums.end());if(nums.size() < 4)return res;//特殊性判断for(int z = 0 ; z < nums.size() ; z++){if(z > 0 && nums[z] == nums[z-1])continue;//去重int target1 = target - nums[z];for(int k = z+1 ; k < nums.size() ; k++){if(k > z+1 && nums[k] == nums[k-1])continue;//去重int target2 = target1 - nums[k];//双指针int l = k+1;int r = nums.size()-1;while(l < r){if(nums[l]+nums[r] == target2){res.push_back({nums[z],nums[k],nums[l],nums[r]});//去重while(l < r && nums[l] == nums[l+1])l++;while(l < r && nums[r] == nums[r-1])r--;}if(nums[l] + nums[r] < target2) l++;else r--;}}}return res;}
};
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
