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, a ≤ b ≤ c ≤ d)
- 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)
public class Solution {
public static void main(String[] args) {
int[] num = {-3,-2,-1,0,0,1,2,3};
System.out.println(fourSum(num, 0));
}
public static ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {
Set<ArrayList<Integer>> hset = new HashSet<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>();
if (num == null || num.length < 4) return listAll;
Arrays.sort(num);
for (int i = 0; i < num.length - 3; i++) {
for (int j = i + 1; j < num.length - 2; j++) {
int p = j + 1;
int q = num.length - 1;
while (p < q) {
if (num[i] + num[j] + num[p] + num[q] == target) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(num[i]);
list.add(num[j]);
list.add(num[p]);
list.add(num[q]);
if (!hset.contains(list)) {
hset.add(list);
listAll.add(list);
}
p++;
q--;
} else if (num[i] + num[j] + num[p] + num[q] < target) {
p++;
} else {
q--;
}
}
}
}
return listAll;
}
}
本文介绍了一个算法,用于在给定数组中查找四个元素之和等于特定目标值的所有唯一组合。该算法通过双层循环进行初步筛选,并使用两个指针在排序后的数组中定位剩余元素,确保元素按非降序排列且不包含重复组合。
8040

被折叠的 条评论
为什么被折叠?



