LeetCode|4SUM

2014-11-24 11:46:31 · 作者: · 浏览: 1

题目

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:

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

思路

和3SUM的类似。先排序,然后固定2个位置,然后对剩下的2个一个个匹配。其中要注意的点就是可以直接跳过附近重复的元素,以此来得到独一无二的结果。

但是这个是n^3的..我本来以为AC不了,结果A了....

请大神指教更好的方法!

代码

public class Solution {
    public ArrayList
  
   > fourSum(int[] num, int target) {
	Arrays.sort(num);
    	ArrayList
   
    > result = new ArrayList
    
     >(); if(num.length==4&&num[0]+num[1]+num[2]+num[3]==target) { ArrayList
     
       temp = new ArrayList
      
       (); temp.add(num[0]); temp.add(num[1]); temp.add(num[2]); temp.add(num[3]); result.add(temp); return result; } for( int a = 0 ; a <=num.length-4; a++) { if(a!=0&&num[a]==num[a-1]) { continue; } for(int b = a+1; b<=num.length-3;b++) { if(b-1>a&&num[b]==num[b-1]) { continue; } int c = b+1; int d = num.length-1; while(c
       
         temp = new ArrayList
        
         (); temp.add(num[a]); temp.add(num[b]); temp.add(num[c]); temp.add(num[d]); result.add(temp); c++; d--; while(c