18. 4Sum 发表于 2022-01-06 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { Arrays.sort(nums); List<List<Integer>> resultList = new ArrayList<>(); 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; // 注意此处是 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; // 注意此处是 continue } int k = j + 1, l = nums.length - 1; while (k < l) { long fourSum = (long) nums[i] + nums[j] + nums[k] + nums[l]; // 注意此处需要显式转型,避免加法计算时溢出 if (fourSum > target) { l--; } else if (fourSum < target) { k++; } 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; }} Reference18. 4Sum