18. 4Sum

来源:互联网 发布:淘宝大牌原单正品店 编辑:程序博客网 时间:2024/06/14 06:00

Given an array S of n integers, are there elements a,b, c, and d in S such that a + b +c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note: The solution set must not contain duplicate quadruplets.

For example, given array S = [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]]

Subscribe to see which companies asked this question


第一次 84ms:

public class Solution {    public List<List<Integer>> fourSum(int[] nums, int target) {                        List<List<Integer>> result = new ArrayList<List<Integer>>();        if(nums.length == 0)            return result;        Arrays.sort(nums);        List<Integer> nowNode = null;                int fixed1=0, fixed2;        int first, last;        int l = nums.length;        int sum = 0;        boolean isExist = false;                while(fixed1 <= (l - 4)){            fixed2 = fixed1 + 1;            while(fixed2 <= (l - 3)){                first = fixed2 + 1;                last = l - 1;                while(first < last){                    isExist = false;                    sum = nums[fixed1] + nums[fixed2] + nums[first] + nums[last];                    if(sum < target){                        first++;                    }else if(sum > target){                        last--;                    }else{                                                for(List<Integer> templ : result){                            if(nums[fixed1] == templ.get(0) && nums[fixed2] == templ.get(1) && nums[first] == templ.get(2)                             && nums[last] == templ.get(3)){                                isExist = true;                                break;                            }                        }                        if(!isExist){                            nowNode = new ArrayList<Integer>();                            nowNode.add(nums[fixed1]);                            nowNode.add(nums[fixed2]);                            nowNode.add(nums[first]);                            nowNode.add(nums[last]);                            result.add(nowNode);                        }                                                                        first++;                        last--;                    }                }                                fixed2++;                            }            fixed1++;        }                return result;            }}

第二次 82ms:

public class Solution {    public List<List<Integer>> fourSum(int[] nums, int target) {        List<List<Integer>> result = new ArrayList<List<Integer>>();        Arrays.sort(nums);        for(int i = 0; i < nums.length; i++){           for(int j = i + 1; j < nums.length; j++){               int sum = (nums[i] + nums[j]);               int m = j + 1, n = nums.length - 1;                while(m < n){                   sum += (nums[m]+nums[n]);                   if(sum == target){                       List<Integer> temp = Arrays.asList(nums[i], nums[j], nums[m], nums[n]);                       if(!result.contains(temp)){                           result.add(temp);                       }                       sum -= (nums[m] + nums[n]);                       n--;                   }else if(sum < target){                       sum -= (nums[m] + nums[n]);                       m++;                   }else{                       sum -= (nums[m] + nums[n]);                       n--;                   }               }           }         }        return result;    }    }


0 0
原创粉丝点击