🌕 18. 四数之和
2022年6月9日
- algorithm
🌕 18. 四数之和
难度: 🌕
问题描述
解法
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
// 思路:
// 固定 a
// 再固定 b
// 此时 [c] + [d] == - ([a] + [b])
int len = nums.length;
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(nums);
for(int i = 0; i <= len - 4; i ++) {
// 去重
if(i > 0 && nums[i] == nums[i - 1]) {
continue;
}
for(int j = i + 1; j <= len - 3; j ++) {
if(j > i + 1 && nums[j] == nums[j - 1]) {
continue;
}
int left = j + 1;
int right = len - 1;
int tar = target - (nums[i] + nums[j]);
while(left < right) {
int sum = nums[left] + nums[right];
if(sum == tar) {
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[left]);
list.add(nums[right]);
res.add(list);
// 去重
while(left + 1 < right && nums[left] == nums[left + 1]) {
left ++;
}
while(left < right - 1 && nums[right] == nums[right - 1]) {
right --;
}
left ++;
} else if(sum > tar) {
right --;
} else {
left ++;
}
}
}
}
return res;
}
}