给你一串数字,找出之和为0的3个数,并且结果不能重复,用Java来写
时间: 2023-10-06 17:08:01 浏览: 52
以下是Java代码实现:
```java
import java.util.*;
public class ThreeSumZero {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums); // 先将数组排序
List<List<Integer>> res = new ArrayList<>();
// 枚举第一个数
for (int i = 0; i < nums.length - 2; i++) {
// 如果当前数和前一个数相等,则跳过,避免重复
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int left = i + 1; // 左指针
int right = nums.length - 1; // 右指针
// 双指针向中间逼近
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum == 0) {
res.add(Arrays.asList(nums[i], 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 < 0) {
left++;
} else {
right--;
}
}
}
return res;
}
public static void main(String[] args) {
int[] nums = {-1, 0, 1, 2, -1, -4};
ThreeSumZero t = new ThreeSumZero();
List<List<Integer>> res = t.threeSum(nums);
System.out.println(res);
}
}
```
注释已经写得很详细了,这里简单介绍一下思路:
1. 先将数组排序;
2. 枚举第一个数,使用双指针法找到另外两个数;
3. 如果找到了符合条件的三个数,加入到结果集中,并移动指针;
4. 避免重复,如果左指针和右指针指向的数与上一个数相同,继续移动指针;
5. 返回结果集。
以上代码输出的结果为:
```
[[-1, -1, 2], [-1, 0, 1]]
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)