剑指offer 数组中和为零的三个数Java

力扣题目链接

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        int n = nums.length;
        //剪枝,当数组小于三个时
        if(n<3) return res;
        Arrays.sort(nums);
        
        for(int i=0;i<n;i++){
            //如果都一个数就大于0,可以不继续了
            if(nums[i]>0) break;
            //保证去重
            if(i>0 && nums[i] == nums[i-1]) continue;
            //左右指针收敛数组
            int l = i+1,r = n-1;
            int tar = -nums[i];
            while(l<r){
                int tmp = nums[l] + nums[r];
                if(tmp<tar) l++;
                else if(tmp>tar) r--;
                else{
                    res.add(Arrays.asList(nums[i],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 res;
    }
}

posted @   蹇爱黄  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示