2
0
0

LeetCode15-三数之和

文章摘要
|

乍一看三个数三指针好复杂,其实这题本质也是双指针,我们可以固定一个数,然后去动其余两个数

需要注意拿到一组三元组后,要先将左右指针移动一位,再进行去重操作,虽说颠倒顺序不影响结果,但是逻辑有点混乱.

其次就是因为我们用了Array.sort(nums)排序,所以对于sum于target不同的大小对比情况,有着对应要移动的边界left/right。

class Solution {
    public List<List<Integer>> threeS  um(int[] nums) {
        List<List<Integer>> list = new List<>();
        Array.sort(nums);
        for(int i = 0;i < nums.length; i++){
           if(i > 0 && nums[i] == nums[i-1]) continue;
           int left = i+1;
           int right = nums.length-1;
           int target = -nums[i];
           while(left < right){
               int sum = nums[left] + nums[right];
               if(sum = target){
                  list.add(Arrays.asList(nums[i], nums[left], nums[right]));
                  left++;
                  right--;
                  while(left < right && nums[left]==nums[left+1]) left++;
                  while(left < right && nums[right]==nums[right-1]) right--;
               }else if(sum < taget){
                   left++;
               }else{
                   right++;
               }
           }
        }
        return list;
    }
}

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论