[Leetcode]四数之和-排序+双指针

tech2023-09-18  94

[Leetcode]四数之和

Leetcode-四数之和

题目描述

给定一个包含 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] ]

解题思路
参考Leetcode-三数之和,在此基础上加了一层循环
实现代码
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>>res; int len=nums.size(); if(len==0)return res; sort(nums.begin(),nums.end()); for(int first=0;first<len-3;first++){ //第一个数 if(first!=0&&nums[first]==nums[first-1]) //避免重复 continue; for(int second=first+1;second<len-2;second++){ //第二个数 if(second!=first+1&&nums[second]==nums[second-1]) //避免重复 continue; int third=second+1; int forth=len-1; while(third<forth){ //双指针 int sum=nums[first]+nums[second]+nums[third]+nums[forth]; if(sum>target) forth--; else if(sum<target) third++; else{ res.push_back({nums[first],nums[second],nums[third],nums[forth]}); third++; forth--; while(third<forth&&nums[third]==nums[third-1]) //避免重复 third++; while(third<forth&&nums[forth]==nums[forth+1]) //避免重复 forth--; } } } } return res; } };
最新回复(0)