当前位置:网站首页>LeetCode15. 三数之和

LeetCode15. 三数之和

2022-04-23 06:41:00 想进阿里的小菜鸡

思路

使用双指针的方式进行。

首先对数组进行排序。

三个指针,一个当前元素指针i,一个左指针left,一个右指针right。

让i一次遍历数组下标,left=i+1;right = nums.length-1;temp = nums[i]+nums[left]+nums[right];当temp大于0时,就将right--;当temp小于0时就left++;当temp==0时就left++,right--;

遍历后的结果存在set中,set可以自动去除重复的元素。最后将set转为list即可。

代码

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        int left = 0;
        int right = nums.length-1;
        List<List<Integer>> res = new ArrayList<>();
        Set<List<Integer>> t = new HashSet<>();
        int temp = 0;
        for(int i = 0;i<=right;i++){
            left = i+1;
            right = nums.length-1;
            while(right>left){
                temp = nums[i]+nums[left]+nums[right];
                if( temp== 0){
                    t.add(Arrays.asList(nums[i], nums[left], nums[right]));
                    right--;
                    left++;
                }else if(temp>0){
                    right--;
                }else{
                    left++;
                }
            }
        }
        for(List l :t){
            res.add(l);
        }
        return res;
    }
}

版权声明
本文为[想进阿里的小菜鸡]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_56640241/article/details/124349909