18. 四数之和

题目描述

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:答案中不可以包含重复的四元组。

示例 1:
输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
  • 0 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

解题思路

本题思路和15题思路一模一样,不做赘述;只需要把双层循环变为三层即可。

vector<vector<int>> fourSum(vector<int>& nums, int target) {
        int i=0,j=0,k,l;
        vector<vector<int>> ans;
        vector<int> temp;
        sort(nums.begin(),nums.end());
        for(i=0;i<nums.size();i++){
            if(i>0&&nums[i]==nums[i-1])continue;
            for(j=i+1;j<nums.size();j++){
            if(j>i+1&&nums[j]==nums[j-1])continue;
                l=nums.size()-1;//k从前往后,l从后往前
                for(k=j+1;k<nums.size();k++){
                    if(k>j+1&&nums[k]==nums[k-1])continue;
                    while(nums[i]+nums[j]+nums[k]+nums[l]>target&&k<l)    
                        l--;
                    if(nums[i]+nums[j]+nums[k]+nums[l]==target&&k<l){
                        temp.push_back(nums[i]);
                        temp.push_back(nums[j]);
                        temp.push_back(nums[k]);
                        temp.push_back(nums[l]);
                        ans.push_back(temp);
                        temp.clear();
                    }
                }

            }
        }
        return ans;
    }

一条评论

留下评论