zoukankan      html  css  js  c++  java
  • 乘风破浪:LeetCode真题_018_4Sum

    乘风破浪:LeetCode真题_018_4Sum

    一、前言

        前面我们已经练习过了三个数相加的集合运算,现在变成了四个数,其实道理是一样的。三个数的时候可以转成两个数的加法,最后来解决,而四个数的可以转换成三个数的加法,最终变成两个数的加法运算。

    二、4Sum

    2.1 问题

    2.2 分析与解决

        根据我们之前的经验,可以很自然地想到变成三个数相加来计算,不过因为是四个数相加,因此需要至少3个循环了,这样时间复杂度就是O(n~3)。下面是这种解法。

    class Solution {
        public List<List<Integer>> fourSum(int[] nums, int target) {
            List<List<Integer>> ans = new ArrayList<>();
            if (nums.length == 0) return ans;
            Arrays.sort(nums);
            for (int i = 0; i < nums.length - 3; i++) {
                if (i > 0 && nums[i] == nums[i - 1]) continue;
                for (int j = i + 1; j < nums.length - 2; j++) {
                    if (j > i + 1 && nums[j] == nums[j - 1]) continue;
                    int k = j + 1, l = nums.length - 1;
                    while (k < l) {
                        int sum = nums[i] + nums[j] + nums[k] + nums[l];
                        if (sum < target) k++;
                        else if (sum > target) l--;
                        else {
                            List<Integer> list = new ArrayList<>();
                            list.add(nums[i]);
                            list.add(nums[j]);
                            list.add(nums[k]);
                            list.add(nums[l]);
                            ans.add(list);
                            if (nums[k] == nums[l]) break;
                            while (k + 1 < l && nums[k] == nums[k + 1]) k++;
                            while (l - 1 > k && nums[l] == nums[l - 1]) l--;
                            k++;
                            l--;
                        }
                    }
                }
            }
            return ans;
        }
    }
    

     

        另外我们也可以做一些细节上面优化,这里不再赘述。

    三、总结

         对于一些类型题,我们只要理解了一些本质,并且在做题的时候多联想一些之前的道理,就能轻松地做出来了。万事开头难,思路是非常重要的。

  • 相关阅读:
    python selenium启动配置
    pyqt5安装 + pycharm配置
    Python redis 存取使用
    pycharm 打不开 解决办法
    Python 将图片上传至阿里云OSS对象存储
    mysql表中已有数据,为表新增一个自增id。
    Python 使用BrowserMob Proxy + Selenium 获取Ajax加密数据
    Pycharm 2020.01亲测激活到2089年
    Python3 执行JS出现JSON未定义问题
    pycharm激活,此方法为永久激活。
  • 原文地址:https://www.cnblogs.com/zyrblog/p/10216351.html
Copyright © 2011-2022 走看看