三数之和

# 题目

力扣 (opens new window)

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

# 代码

public List<List<Integer>> threeSum(int[] nums) {
    Arrays.sort(nums);
    List<List<Integer>> results = new ArrayList<>();
    for (int i = 0; i < nums.length; i++) {
        int lp = i+1;
        int rp = nums.length-1;
        if (i>0 && nums[i] == nums[i-1]){
            continue;
        }
        while (lp<rp){
            int sum = nums[i]+nums[lp]+nums[rp];
            if (sum == 0){
                results.add(Arrays.asList(nums[i],nums[lp],nums[rp]));
                lp++;
                rp--;
                while (lp<rp && nums[lp] == nums[lp-1]){
                    lp++;
                }
                while (lp<rp && nums[rp]==nums[rp+1]){
                    rp--;
                }
            }else if (sum>0){
                rp--;
            }else {
                lp ++;
            }
        }
    }
    return results;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
上次更新: 2023/10/31, 13:49:43
最近更新
01
go-admin-ui项目仿写练手1-登录页
06-29
02
maven依赖问题
06-17
03
JVM相关命令
02-21
更多文章>