剑指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;
    }
}

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

上一篇:linux下安装 ping 命令


下一篇:Python学习笔记9—文件