import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型二维数组
*/
public int[][] fourSum (int[] nums, int target) {
// write code here
List<List<Integer>> result = new ArrayList<>();
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 left = j + 1;
int right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[j] + nums[left] + nums[right];
if (sum == target) {
result.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));
while (left < right && nums[left] == nums[left + 1]) left++;
while (left < right && nums[right] == nums[right - 1]) right--;
left++;
right--;
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
}
int[][] output = new int[result.size()][4];
for (int i = 0; i < result.size(); i++) {
output[i] = new int[] {result.get(i).get(0), result.get(i).get(1), result.get(i).get(2), result.get(i).get(3)};
}
return output;
}
}
Java代码
这个问题涉及以下知识点
- 数组操作
- 双指针法
- 去重
- 二维数组
代码的文字解释如下:
- fourSum 方法接受一个整数数组 nums 和目标值 target 作为输入。
- 对数组 nums 进行排序,以便进行双指针法处理。
- 使用两层嵌套循环遍历数组,其中外层循环 i 和内层循环 j 用于固定前两个元素。
- 在内层循环中,使用双指针 left 和 right 在剩余部分查找满足条件的后两个元素。
- 如果找到满足条件的四元组,将其添加到 result 列表中,但同时需要跳过重复元素。
- 将 result 列表中的四元组转换为二维数组 output,以满足函数的返回类型要求。

京公网安备 11010502036488号