题目:
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)
链接:http://leetcode.com/problems/4sum/
题解:
同3Sum。 Time Complexity - O(n3), Space Complexity - O(1)
public class Solution { public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if(num == null || num.length < 4) return result; Arrays.sort(num); for(int i = 0; i < num.length - 3; i ++){ if(i > 0 && num[i] == num[i - 1]) continue; for(int j = i + 1; j < num.length - 2; j ++){ if(j > i + 1 && num[j] == num[j - 1]) continue; int left = j + 1, right = num.length - 1; while(left < right){ int sum = num[i] + num[j] + num[left] + num[right]; if(sum == target){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(num[i]); list.add(num[j]); list.add(num[left]); list.add(num[right]); result.add(list); left ++; right --; while(left < right && num[left] == num[left - 1]) left ++; while(left < right && num[right] == num[right + 1]) right --; } else if(sum < target) { left ++; } else { right--; } } } }
return result; } }