当前位置: 首页 > article >正文

力扣labuladong一刷day12拿下N数之和问题共4题

力扣labuladong一刷day12拿下N数之和问题共4题

首先我再强调一下 什么时候使用哈希法,当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

一、1. 两数之和

题目链接:https://leetcode.cn/problems/two-sum/
思路:使用hashmap存放遍历过的元素,只要target-nums[i]存在即可返回

class Solution {
   public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int t = target-nums[i];
            if (map.containsKey(t)) {
                return new int[]{map.get(t), i};
            }else {
                map.put(nums[i], i);
            }
        }
        return new int[]{};
    }
}

二、15. 三数之和

题目链接:https://leetcode.cn/problems/3sum/
思路:每一部分都需要去重,a,b,c 三个数,-a = b+c 这就把3数之和变成了2数之和,a每前进一步,b和c都要把[a+1, len-1]的区间内寻找和为-a的两个数,当然因为排序过了,每一个数使用时都要去重,如果出现过就跳过。

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

三、167. 两数之和 II - 输入有序数组

题目链接:https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/
思路:左右双子针。

class Solution {
   public int[] twoSum(int[] numbers, int target) {
        int i = 0, j = numbers.length-1;
        while (i<j) {
            int t = numbers[i]+numbers[j];
            if (t == target) return new int[]{i+1, j+1};
            else if (t > target) {
                j--;
            }else {
                i++;
            }
        }
        return new int[]{-1, -1};
    }
}

四、18. 四数之和

题目链接:https://leetcode.cn/problems/4sum/
思路:和上面的3数之和一样,当然还有去重和早停

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> arrayLists = new ArrayList<>();
        if (nums.length<4) return arrayLists;
        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 (nums[i] + nums[j] > target && nums[i] > 0) break;
                if (j > i+1 && nums[j] == nums[j-1])continue;
                int k = j+1, v = nums.length-1;
                while (k < v) {
                    long t =(long) nums[i]+nums[j]+nums[k]+nums[v];
                    if (t == target) {
                        arrayLists.add(Arrays.asList(nums[i], nums[j], nums[k], nums[v]));
                        while (k<v && nums[k] == nums[k+1]) k++;
                        while (k<v && nums[v] == nums[v-1]) v--;
                        k++;
                        v--;
                    }else if (t > target) {
                        v--;
                    }else {
                        k++;
                    }
                }
            }
        }
        return arrayLists;
    }
}

http://www.kler.cn/a/132475.html

相关文章:

  • 数据库-Derby
  • Qt的一个基本用户登录界面编写|| 从0搭建QT的信号与槽的应用案例 ||Qt样式表的应用
  • ggplot2-scale_x_continuous()
  • 若依权限控制
  • WebRTC实现双端音视频聊天(Vue3 + SpringBoot)
  • 基于差分、粒子群算法下的TSP优化对比
  • 一文搞懂设计模式之代理模式
  • AIGC创作系统ChatGPT源码,AI绘画源码,支持最新GPT-4-Turbo模型,支持DALL-E3文生图
  • “开源 vs. 闭源:大模型的未来发展趋势预测“——探讨大模型未来的发展方向
  • 2023版Idea创建JavaWeb时,右键new没有Servlet快捷键选项
  • Linux输入设备应用编程(键盘,按键,触摸屏,鼠标)
  • 电子画册真的好好用,制作也简单,都快来学学!
  • Springboot集成JDBC
  • V100 配置 Scanpy + Scvi + Pytorch
  • 快速搜索多个word、excel等文件中内容
  • Element UI 偶发性图标乱码问题
  • flutter web 中嵌入一个html
  • 基于单片机体温脉搏检测控制系统及源程序
  • 【OpenGauss源码学习 —— 执行算子(Append算子)】
  • 【Linux】vimrc 配置方案
  • springboot项目中没有识别到yml文件解决办法
  • 【机器学习】朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)
  • AlphaControls控件TsDBCombobox出错:访问违规
  • 腾讯云服务器怎么买便宜?腾讯云服务器新人专享限时特惠购买链接
  • 为RabbitMQ配置SSL
  • 【10套模拟】【6】