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

2022/2/4 1:15:50

本文主要是介绍剑指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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程