LeetCode中的4Sum问题,基本是3Sum的改进版
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)
• 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 static ArrayList<HashMap<String, Integer>> solution2_1_10(
ArrayList<Integer> list, int target) {
Collections.sort(list);
ArrayList<HashMap<String, Integer>> res = new ArrayList<HashMap<String, Integer>>();
for (int i = 0; i < list.size() - 3; i++) {
for (int j = i + 1; j < list.size() - 2; j++) {
int m = j + 1;
int n = list.size() - 1;
while (m < n) {
if (list.get(i) + list.get(j) + list.get(m) + list.get(n) == target) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("index1", list.get(i));
map.put("index2", list.get(j));
map.put("index3", list.get(m));
map.put("index4", list.get(n));
res.add(map);
while (list.get(m + 1) == list.get(m))
m++;
while (list.get(n - 1) == list.get(n))
n--;
m++;
n--;
} else {
if (list.get(i) + list.get(j) + list.get(m)
+ list.get(n) < target) {
m++;
} else {
n--;
}
}
}
}
}
for (int t = 0; t < res.size(); t++) {
HashMap<String, Integer> map = res.get(t);
System.out.println("(" + map.get("index1") + ","
+ map.get("index2") + "," + map.get("index3") + ","
+ map.get("index4") + ")");
}
return res;
}