Leetcode 15:三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

解题思路:

本题的关键是如何去重。

public static List> threeSum(int[] nums) {
        int left,right,sum;
        int len=nums.length;
        List> result=new ArrayList<>();
        Arrays.sort(nums);  //对数组进行排序

        for(int i=0;i 0) {
                return result;
            }

            if(i>0 && nums[i]==nums[i-1]){   //对a去重
                continue;
            }

            left=i+1;
            right=len-1;
            while (left0){
                    right--;
                }else{
                    List list=new ArrayList<>();
                    list.add(nums[i]);
                    list.add(nums[left]);
                    list.add(nums[right]);
                    result.add(list);
                    //result.add(Arrays.asList(nums[i],nums[left],nums[right]));
                    // 对b、c去重
                    while (right > left && nums[right] == nums[right - 1]) right--;
                    while (right > left && nums[left] == nums[left + 1]) left++;
                    left++;
                    right--;
                }
            }
        }
        return result;
    }

你可能感兴趣的:(leetcode,算法,职场和发展)