
4Sum
注意点在于,去掉重复,在第二个for循环中,首先要判断j是不是等于i+1,如果j==i+1, 那么即使数字一样也没事儿。
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
|
public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> ans = new ArrayList<>(); if (nums == null || nums.length < 4) return ans; Arrays.sort(nums); for (int i = 0; i < nums.length - 3; ++i) { if (i != 0 && nums[i] == nums[i - 1]) continue; for (int j = i + 1; j < nums.length - 2; ++j) { if (j != i + 1 && nums[j] == nums[j - 1]) continue; int begin = j + 1, end = nums.length - 1; while (begin < end) { int sum = nums[i] + nums[j] + nums[begin] + nums[end]; if (sum == target) { List<Integer> tmp = new ArrayList<>(); tmp.add(nums[i]); tmp.add(nums[j]); tmp.add(nums[begin]); tmp.add(nums[end]); ans.add(tmp); while (begin < end && nums[begin] == nums[begin + 1]) ++begin; while (begin < end && nums[end] == nums[end - 1]) --end; ++begin; --end; } else if (sum > target) --end; else ++begin; } } } return ans; }
|
近期评论