leetcode--4Sum

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.youkuaiyun.com/crazy__chen/article/details/45567371

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值