algorithm-base/animation-simulation/求和问题/四数之和.md

103 lines
4.5 KiB
Java
Raw Normal View History

2021-03-20 08:44:27 +00:00
> **[tan45du_one](https://raw.githubusercontent.com/tan45du/tan45du.github.io/master/个人微信.15egrcgqd94w.jpg)** ,备注 github + 题目 + 问题 向我反馈
>
>
>
> <u>[****](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
#### [18. ](https://leetcode-cn.com/problems/4sum/)
2021-03-19 07:26:58 +00:00
##
> n nums target nums abc d 使 a + b + c + d target
>
>
>
>
> nums = [1, 0, -1, 0, -2, 2] target = 0
>
>
> [
> [-1, 0, 0, 1],
> [-2, -1, 1, 2],
> [-2, 0, 0, 2]
> ]
###
####
target 0 target
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/四数之和起始.2mi8qclt1h40.png)
绿
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/四数之和例子.3xy3mil2rp40.png)
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/四数之和.337d5ffc7040.gif)
####
```java
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
if(nums.length < 4){
return new ArrayList<>();
}
Arrays.sort(nums);
List<List<Integer>> arr = new ArrayList<>();
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 l = j+1;
int r = nums.length-1;
while (l < r) {
int sum = nums[i] + nums[j] + nums[l] + nums[r];
if (sum == target) {
//存入
arr.add(new ArrayList<>
(Arrays.asList(nums[i], nums[j], nums[l], nums[r])));
//去重
while (l < r && nums[l] == nums[l+1]) {
l++;
}
while (l < r && nums[r] == nums[r-1]) {
r--;
}
l++;
r--;
}
else if (sum > target) {
r--;
}
else {
l++;
}
}
}
}
return arr;
}
}
```