1. 首页
  2. 软件开发
  3. day-22 三数之和

day-22 三数之和

  • 发布于 2024-09-26
  • 1 次阅读


参考了答案。。。。。。

思路:先对nums[]数组进行排序,i表示第一个数的的索引,i从零遍历到nums.length j表示第二个数的索引,j从i+1开始向后遍历 k表示第三个数的索引,k从nums.length-1向前开始遍历,直到j k相交

注意点:不能重复 所以i j不能取连续相同的数

code:

class Solution {

    public List<List<Integer>> threeSum(int[] nums) {

        Arrays.sort(nums);
        List<List<Integer>> res=new ArrayList<List<Integer>>();
        for(int i=0;i<nums.length;i++){

            if(i>0&&nums[i]==nums[i-1])continue;//避免i选到相同的数字
            int j=i+1;
            int k=nums.length-1;
            while(j<k){

                while (j > i + 1 && j < nums.length && nums[j] == nums[j - 1]) j++;//避免j选到相同的数字
                if (j >= k) break;//j与k相交

                if(nums[i]+nums[j]+nums[k]==0){

                List<Integer> t=new ArrayList<Integer>();
                t.add(nums[i]);
                t.add(nums[j]);
                t.add(nums[k]);
                res.add(t);
                j++;
            }else if(nums[i]+nums[j]+nums[k]>0){

                k--;
            }else if(nums[i]+nums[j]+nums[k]<0){

                j++;
            }
            }

        }

        return res;
    }
}

原文链接: https://blog.csdn.net/qq_53568730/article/details/136787501