leetcode:18:四数之和 java实现

第三天 我会坚持下去每天做一两道题,谢谢大家支持,我会努力 

package LeetCode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

public class FourSum {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        if(nums.length<4) return new ArrayList<>();
        Arrays.sort(nums);
        HashSet<List<Integer>> set = new HashSet<>();
        int i=0;
        int j=nums.length-1;
        while(j-i>2){
            //作为比较对象
            int juge=0;
            int k=i+1;
            int l=j-1;
            while(k<l){
                juge=nums[i]+nums[j]+nums[k]+nums[l];
                if(juge==target){
                    List<Integer> result = new ArrayList<Integer>();
                    result.add(nums[i]);
                    result.add(nums[k]);
                    result.add(nums[j]);
                    result.add(nums[l]);
                    set.add(result);
                    while(k< l && nums[k] == nums[k + 1]){
                        k++;
                    }
                    while(k<l&&nums[l]==nums[l+1]){
                        l--;
                    }
                    k++;
                    l--;
                }else if(juge<target){
                    k++;
                }else{
                    l--;
                }
                //相当于两个for循环每次j走到不合理的条件时则i会向前走一个而j恢复原位置在进行走一边
                //由于直接用值判断判断j与i会有遗漏所以进行修改
            } if (j-i>3){
                j--;
            }else {
                i++;
                j=nums.length-1;
            }
        }
        return new ArrayList<>(set);
    }
    public static void main(String []args){
        FourSum a=new FourSum();
        int [] s={-3,-1,0,2,4,5};
        System.out.println(a.fourSum(s, 2));

    }
}

猜你喜欢

转载自blog.csdn.net/microopithecus/article/details/83892258
今日推荐