Loading

Leetcode-18-四数和为K

题目链接


题目描述

一个 n 个整数组成的数组 nums ,和一个目标值 K。
找出满足下述条件且不重复的四元组

nums[a] + nums[b] + nums[c] + nums[d] == K

思路

三个数和为0的进阶版。
思路是一样的,知识多一层循环, 时间复杂度O(n^3)。

  1. 排序,方便跳过重复的解
  2. 双层循环确定前两个数,nuns[i] nums[j]
  3. 双指针 L=j+1, R=n-1,确定而后两个数。
  4. 和 > K: R--
  5. 和 < K: L++

C++代码

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> ans;
        int n = nums.size();
        sort(nums.begin(),nums.end());
        long long T;
        int L, R, T1, T2;
        for (int i = 0; i < n-3; i++)
        {
            if (i!=0 && nums[i]==nums[i-1]) continue;
            T1 = nums[i];
            for (int j = i+1; j < n-2; j++)
            {
                if (j!=i+1 && nums[j]==nums[j-1]) continue;
                T2 = nums[j];
                L=j+1, R=n-1;
                while (L < R)
                {
                    T = (long long)T1+T2+nums[L]+nums[R];
                    if (T == target)
                    {
                        ans.push_back({T1,T2,nums[L],nums[R]});
                        L++, R--;
                        while (L<R && nums[L]==nums[L-1]) L++;
                    }
                    else if (T > target)
                        R--;
                    else
                        L++;
                }
            }
        }
        return ans;
    }
};
posted @ 2022-01-18 13:27  ARUI丶  阅读(93)  评论(0编辑  收藏  举报