三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,
使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

思路:

1.对数组进行排序
2.确定一个数num[i],然后确定左边界和右边界
3.计算这个三个数之和,与0进行判断,更新左索引或者右索引
4.注意去除重复结果。1)跳过相同的num[i]。2)跳过索引值相同的左右索引。

 public static List<List<Integer>> threeSum2(int[] nums){
        int len = nums.length;
        List<List<Integer>> list = new ArrayList<>();
        if ( len < 3) return list;

        Arrays.sort(nums);

        for (int i = 0; i < len;i++){
            int flag = nums[i];
            if (flag > 0) break;  // 如果当前数字大于0,则三数之和一定大于0,所以结束循环
            if (i > 0 && flag == nums[i-1]) continue; //去重,当前i不执行
            int l = i+1;
            int r = len-1;
            while (l<r){
                int res = flag + nums[l]+ nums[r];
                if ( res > 0){
                    r--;
                }else if (res < 0){
                    l++;
                }else {
                   list.add( Arrays.asList(flag, nums[l], nums[r]));
                    while (l<r && nums[l] == nums[l+1]) l++; // 去重
                    while (l<r && nums[r] == nums[r-1]) r--; // 去重
                    l++;
                    r--;
                }
            }
        }
        return list;
    }
全部评论

相关推荐

2025-12-19 15:04
门头沟学院 Java
小肥罗:hr爱上你了,你负责吗哈哈
点赞 评论 收藏
分享
2025-11-29 19:59
已编辑
沧州师范学院 前端工程师
smile丶snow:学校可以放在最后面。只保留一个专业和本科就行了。主修课程什么可以去掉。一个项目太少了可以去github看看再加一个
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务