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