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:
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) { ArrayListtemp = 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