leetcode--4Sum

来源:互联网 发布:java 获得访问者ip 编辑:程序博客网 时间:2024/06/17 06:19

Given an array S of n integers, are there elements abc, 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:

  • Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
  • 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)


[java] view plain copy
  1. public class Solution {  
  2.     public List<List<Integer>> fourSum(int[] nums, int target) {  
  3.         List<List<Integer>> result = new ArrayList<List<Integer>>();    
  4.         Arrays.sort(nums);  
  5.         for(int i=0;i<nums.length;i++){    
  6.             if(i!=0 && nums[i]==nums[i-1]){//查重  
  7.                 continue;  
  8.             }  
  9.             for(int j=i+1;j<nums.length;j++){  
  10.                 if(j!=i+1 && nums[j]==nums[j-1]){//查重  
  11.                     continue;  
  12.                 }  
  13.                  int low = j+1;    
  14.                  int high = nums.length-1;                            
  15.                  while(low<high){          
  16.                      int sum = nums[i]+nums[j]+nums[low]+nums[high];  
  17.                      if(sum>target){  
  18.                          high--;  
  19.                      }else if(sum < target){  
  20.                          low++;  
  21.                      }else if(low!=j+1&&nums[low]==nums[low-1]){//查重  
  22.                          low++;  
  23.                      }else if(high!=nums.length-1&&nums[high]==nums[high+1]){//查重  
  24.                          high--;  
  25.                      }else{  
  26.                          List<Integer> list = new ArrayList<Integer>();     
  27.                          list.add(nums[i]);list.add(nums[j]);  
  28.                          list.add(nums[low]);list.add(nums[high]);    
  29.                          result.add(list);                            
  30.                          low++;    
  31.                          high--;    
  32.                      }  
  33.                  }                       
  34.             }                 
  35.         }    
  36.         
  37.         return result;    
  38.     }  
  39. }  

原文链接http://blog.csdn.net/crazy__chen/article/details/45567371