1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> resultList = new ArrayList<>();
Arrays.sort(nums);
for (int i = 0; i < nums.length - 3; i++) { if (i > 0 && nums[i] == nums[i - 1]) { continue; }
if ((long) nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) { break; } if ((long) nums[i] + nums[nums.length - 3] + nums[nums.length - 2] + nums[nums.length - 1] < target) { continue; }
for (int j = i + 1; j < nums.length - 2; j++) { if (j > i + 1 && nums[j] == nums[j - 1]) { continue; }
if ((long) nums[i] + nums[j] + nums[j + 1] + nums[j + 2] > target) { break; } if ((long) nums[i] + nums[j] + nums[nums.length - 2] + nums[nums.length - 1] < target) { continue; }
int k = j + 1, l = nums.length - 1; while (k < l) { long sum = (long) nums[i] + nums[j] + nums[k] + nums[l]; if (sum < target) { k++; } else if (sum > target) { l--; } else { resultList.add(Arrays.asList(nums[i], nums[j], nums[k++], nums[l--])); while (k < l && nums[k] == nums[k - 1]) { k++; } while (k < l && nums[l] == nums[l + 1]) { l--; } } } } }
return resultList; } }
|