题目
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) { 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