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

leetcode两数、三数、四数之和

如有错误,感谢不吝赐教、交流

文章目录

  • 两数之和
    • 题目
    • 方法一:暴力两重循环(不可取)
    • 方法二:HashMap空间换时间
  • 三数之和
    • 题目
    • 方法一:当然是暴力破解啦
    • 方法二:同两数之和的原理,借助HashMap和HashSet实现
  • 四数之和

两数之和

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

方法一:暴力两重循环(不可取)

方法二:HashMap空间换时间

借助HashMap实现,如下图示例
在这里插入图片描述

public int[] twoSum(int[] nums, int target) {HashMap<Integer, Integer> map = new HashMap<>();map.put(target - nums[0], 0);int res [] = new int[2];for (int i = 1; i < nums.length; i++) {Integer index = map.get(nums[i]);if (index != null) {res[0] = (int) index;res[1] = i;break;} else {map.put(target - nums[i], i);}}return res;}

三数之和

题目

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。 这里尤其注意一下,不能包含重复的三元组(借助HashSet实现比较简单,不过有点费时间和空间)

方法一:当然是暴力破解啦

直接使用三重for循环暴力破解,太费时间,不可取。

方法二:同两数之和的原理,借助HashMap和HashSet实现

要求是三个数之和,这里将其中一个数保存到HashMap中,再使用双重for循环遍历,即可获得三个数的答案
原理是和两数之和的原理一样。
这里需要注意,会出现重复的组合结果,如[0, 0,0,0],可能得组合就有[0,0,0], [0,0,0], [0,0,0]
显然这里重复了,于是使用HashSet去重。

// 先对nums排序Arrays.sort(nums);HashMap<Integer, Integer> map = new HashMap<>();HashSet<List<Integer>> hashSet = new HashSet<>();map.put(-nums[0], 1);for (int i = 1; i < nums.length - 1; i++) {for (int j = i + 1; j < nums.length; j++) {int i1 = nums[i] + nums[j];Integer map_val = map.get(i1);if (map_val != null) {List<Integer> integers = new ArrayList<>();integers.add(-i1);integers.add(nums[i]);integers.add(nums[j]);hashSet.add(integers);}}map.put(-nums[i], 1);}List<List<Integer>> lists = new ArrayList<>(hashSet);return lists;

四数之和

方法原理和上面一样,借助HashMap和三重for循环实现

ps:计划每日更新一篇博客,今日2023-04-22,日更第六天,昨日更新:LeetCode6_N字形变换

http://www.lryc.cn/news/62158.html

相关文章:

  • 使用Docker部署wikitten个人知识库
  • 【MYSQL】Java的JDBC编程(idea连接数据库)
  • 机器学习——主成分分析法(PCA)概念公式及应用python实现
  • 手写axios源码系列二:创建axios函数对象
  • HTB-Time
  • 零基础C/C++开发到底要学什么?
  • OpenStack中的CPU与内存超分详解
  • main.m文件解析--@autoreleasepool和UIApplicationMain
  • C语言复习之顺序表(十五)
  • 学系统集成项目管理工程师(中项)系列10_立项管理
  • 电视盒子哪个好?数码小编盘点2023电视盒子排行榜
  • flink动态表的概念详解
  • ArcGIS Pro用户界面
  • HDCTF 2023 Pwn WriteUp
  • 【 Spring 事务 】
  • 【刷题之路】LeetCode 203. 移除链表元素
  • 关于Open Shift(OKD) 中 用户认证、权限管理、SCC 管理的一些笔记
  • 活动文章测试(勿删)
  • Windows下 批量重命名文件【bat实现】
  • 从 Milvus 2.2 到 2.2.6,我们是如何持续稳定升级的
  • 自学python有推荐的么
  • 设计模式 --- 行为型模式
  • 防御式编程
  • 导出pdf Puppeteer 和 wkhtmltopdf区别
  • sequelize + Nodejs + MySQL 的简单用法
  • Android Jetpack - Navigation 组件:进行应用程序导航
  • MySQL的binlog原理和它的几种使用方法
  • 40岁以上的程序员还容易找到工作吗?聊聊我自己的亲身经历
  • Class类
  • Python小姿势 - 可选知识点: