zoukankan      html  css  js  c++  java
  • LeetCode 15

    https://leetcode-cn.com/problems/3sum/

    我做这个题的感觉正如讨论区中第一赞说的那样。。因为以前做过2sum的题,所以下意识考虑使用两个循环,把问题转变成2sum的类型,但是发现做出来很有问题。所以就去看了讨论区的说法。

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

    首先先对原数组进行排序,这是基本操作。

    然后使用一个指针,来访问开始的位置。

    这里使用到了一个技巧以避免出现T的问题

     if(i == 0 || (i>0 && nums[i] != nums[i-1]))

    这个是为了防止第一个元素就出现相同的情况。

    下面如果找到l r满足nums[i]+nums[l]+nums[r] == 0的情况,就直接加入result这个list中,然后让l r分别寻找到下一个不同的元素然后再来作比较。这个思想有点像之前做的那个最大的盛水容器的题。

  • 相关阅读:
    定理环境
    tcolorbox 宏包简明教程
    【专访】南科大数学系何炳生教授——四十年上下求索
    研究生导师为什么喜欢问学生家境?
    高德纳谈《具体数学》的诞生
    剑桥大学
    线性代数
    APPCAN的mas服务报错
    github删除仓库
    Angular2入门教程-2 实现TodoList App
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/12726315.html
Copyright © 2011-2022 走看看