4sum

public class Solution {
    public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {
        // the same as 3sum
        ArrayList<ArrayList<Integer>> res =  new ArrayList<ArrayList<Integer>>();
        if(num==null|| num.length<4) return res;
        Arrays.sort(num); // 为啥又忘
        
        HashSet<ArrayList<Integer>> hs = new HashSet<ArrayList<Integer>>();
        
        for(int i=0; i<num.length-3; i++){
            for(int j=i+1; j<num.length-2; j++){
                int low = j+1, high = num.length-1;
                while(low<high){
                    int sum = num[i]+num[j]+num[low]+num[high];
                    if(sum==target){ // 看见兔子target,才下套 tmp
                        ArrayList<Integer> tmp = new ArrayList<Integer>();
                        tmp.add(num[i]);
                        tmp.add(num[j]);
                        tmp.add(num[low]);
                        tmp.add(num[high]);
                        if(!hs.contains(tmp)){
                            hs.add(tmp);
                            res.add(tmp);
                        }
                        low++;
                        high--;
                    }else if(sum<target){
                        low++;
                    }else
                        high--;
                }
            }
        }
        return res;
    }
}

 

posted @ 2015-04-06 11:54  世界到处都是小星星  阅读(150)  评论(0编辑  收藏  举报