import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型二维数组
*/
public int[][] fourSum(int[] nums, int target) {
// write code here
Arrays.sort(nums);
int start = 0;
LinkedList<int[]> linkedList = new LinkedList<>();
while (start<nums.length-3) {
if(start>=1 && nums[start]==nums[start-1]){
start++;
continue;
}
int end = nums.length-1;
while (end >= 3) {
if(end<=nums.length-2 && nums[end]==nums[end+1]){
end--;
continue;
}
int left = start + 1;
int right = end - 1;
while (left < right) {
if (nums[left] + nums[right] == target - nums[start] - nums[end]) {
linkedList.add(new int[]{nums[start], nums[left], nums[right], nums[end]});
left++;
right--;
} else if (nums[left] + nums[right] > target - nums[start] - nums[end]) {
right--;
} else if (nums[left] + nums[right] < target - nums[start] - nums[end]) {
left++;
}
}
end--;
}
start++;
}
int[][] arr = new int[linkedList.size()][];
for (int i = 0; i < linkedList.size(); i++) {
arr[i] = linkedList.get(i);
}
return arr;
}
}
本题考察的知识点是双指针的应用,所用编程语言是java
我们其实这题固定一个位置,这题这就是跟上一题一样的解法了,所以我们先固定一个位置,然后就是三个数之和等于目标值。对于找数组中合适的三个数之和求目标值,我们再继续固定一个目标值,然后就是双指针之和求目标值。

京公网安备 11010502036488号