leetcode 15 三数之和

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 14:53:06

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

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

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

 

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> ls =new ArrayList<>();
        for (int i = 0; i < nums.length-2; i++) {
            if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
                int j = i+1;
                int k = nums.length-1;
                while(j < k) {
                    if (nums[j]+nums[k]+nums[i] < 0) {
                        while(j < k && nums[j] == nums[j+1]) {
                            j++;
                        }
                        j++;
                    }
                    else if (nums[j]+nums[k]+nums[i] == 0) {
                        ls.add(Arrays.asList(nums[i],nums[j],nums[k]));
                        while(j < k && nums[j] == nums[j+1]) {
                            j++;
                        }
                        j++;
                        while(k > j && nums[k] == nums[k-1]) {
                            k--;
                        }
                        k--;
                    }
                    else {
                        while(k > j && nums[k] == nums[k-1]) {
                            k--;
                        }
                        k--;
                    }
                }
            }
            
        }
        return ls; 
    }   
}

注意点:1 忽略重复三元组

               2 不可以直接删除数组元素,否则会漏解

               3 循环结束后还要执行一次j++,k--,否则会超时

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!