[18] LeetCode 4との数

トピックの評価:4Sum(ミディアム)

件名の説明:

アレイ所与numsn個の整数と整数target、要素があるBC、およびDなるよう+ B + C + D = の合計を与え、アレイ内のすべてのユニークな四つ組を探しますnumstargettarget

注意:

ソリューションセットは、重複四つ組を含めることはできません。

例:

Given array nums = [1, 0, -1, 0, -2, 2], and target = 0.

A solution set is:
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]

  問題の意味:、nは整数NUMS目標と目標値を含む配列を考えるは+ B + C + Dが目標の値に等しくなるように、そこに四つの要素は、B、Cであり、そしてDのNUMSか否かを判断しますか?すべてのクワッドの条件を満たし、繰り返さない特定します。


問題解決のアイデア:

  これは特別なもの、の3人のデジタル和を直接参照しない。[15] LeetCode 3と0の数

  他の特定のソリューションが見つからないオンライン、2つずつの合計に半分の方法を使用して、あまりにも面倒に感じ、直感的ではない、とここでは、外側の層と3プラスの数に直接使用されることがありますされます1サイクルが、時間複雑である:O(N ^ 3)。

  次に、このような練習は主に要約を作成するには:

  二つの数字と範囲、練習:

  三と(N合計数)列の練習の数:

  • ステップ:java.util.Arrays.sort([] NUMSをINT)、昇順
  • 第二段階:重複排除のために近い中心にアレイのwhileループの双方向ポインタ後のループのN-2層に加え、2つの双方向ポインタ、二つの円がループしながら、ネストしながら、
class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> res=new ArrayList<>();
        if(nums==null && nums.length==0)
            return res;
        Arrays.sort(nums);
        int len=nums.length;
        for(int i=0;i<len-3;i++){
            if(i>0 && nums[i-1]==nums[i]) //跳过重复的
                continue; 
            for(int j=i+1;j<len-2;j++){
                if(j>i+1 && nums[j]==nums[j-1])  //跳过重复的
                    continue;
                int low=j+1,high=len-1,sum=target-nums[i]-nums[j];
                while(low<high){
                    if(nums[low]+nums[high]==sum){ //找到一个解
                        res.add(Arrays.asList(nums[i],nums[j],nums[low],nums[high]));
                        while(low<high && nums[low+1]==nums[low])
                            low++;
                        while(low<high && nums[high-1]==nums[high])
                            high--;
                        low++;
                        high--;
                    }else if(nums[low]+nums[high]<sum)
                        low++;
                    else
                        high--;
                }
            }
        }
        return res;
    }
}

おすすめ

転載: www.cnblogs.com/gzshan/p/11129595.html