算法--三数之和

给定一个包含 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) {
 List<List<Integer>> list = new ArrayList<>();
        Set<String>  set = new HashSet<>();
        if(nums!=null&&nums.length>2){
            Arrays.sort(nums);
            for(int i=0;i<nums.length-2;i++){
                int m = nums[i];

                int j = i+1;
                int z = nums.length-1;
                while(j<z){
                    int kj = nums[j];
                    int kz = nums[z];
                    if(kj+kz+m==0){
                        List<Integer> ks = new ArrayList<>();
                        ks.add(m);
                        ks.add(kj);
                        ks.add(kz);
                        j++;
                        z--;
                        if(!set.contains(kj+","+kz)){
                            list.add(ks);
                        }
                        set.add(kj+","+kz);

                    }else if(kj+kz+m>0){
                        z--;
                    }else if (kj+kz+m<0){
                        j++;
                    }


                }

            }
        }
        return list;
    }
}

猜你喜欢

转载自blog.csdn.net/s297165331/article/details/82114688