【代码随想录】哈希表

文章目录

  • 242.有效的字母异位词
  • 349. 两个数组的交集
  • 202. 快乐数
  • 1. 两数之和
  • 454. 四数相加 II
  • 383. 赎金信
  • 15. 三数之和
  • 18. 四数之和

242.有效的字母异位词

在这里插入图片描述

class Solution {public boolean isAnagram(String s, String t) {if(s==null || t==null || s.length()!=t.length()){return false;}Map<Character, Integer> mapS=strToMap(s);Map<Character, Integer> mapT=strToMap(t);return mapS.equals(mapT);}private Map<Character, Integer> strToMap(String str){Map<Character, Integer> map = new HashMap<>();for(int i=0;i<str.length();i++){char ch=str.charAt(i);// if(map.containsKey(ch)){//     map.put(ch,map.get(ch)+1);// }else{//     map.put(ch,1);// }map.put(ch, map.getOrDefault(ch,0)+1);}return map;}
}

为什么用下面的代码代替 equals() 方法来判断两个 Map 的内容是否相等时,会有一个测试用例不通过?

for(Map.Entry<Character, Integer> entry:mapS.entrySet()){Character keyS=entry.getKey();Integer valueS=entry.getValue();if(!mapT.containsKey(keyS) || mapT.get(keyS)!=valueS){return false;}
}

在这里插入图片描述

349. 两个数组的交集

在这里插入图片描述

class Solution {public int[] intersection(int[] nums1, int[] nums2) {if(nums1==null || nums2==null){return null;}// 分别将两个数组转成Set集合,去重Set<Integer> set1=new HashSet<>();for(int i=0;i<nums1.length;i++){set1.add(nums1[i]);}Set<Integer> set2=new HashSet<>();for(int i=0;i<nums2.length;i++){set2.add(nums2[i]);}//求set1与set2的交集,交集保存在set1中//retainAll:保留两者都有的set1.retainAll(set2);int[] num=new int[set1.size()];int j=0;for(Integer item:set1){num[j++]=item;}return num;}
}

202. 快乐数

在这里插入图片描述

class Solution {public boolean isHappy(int n) {// 将正整数n的每一位放入List集合,升序排列List<Integer> list = getNewList(n);Set<List> set=new HashSet<>();int sum=-1;while(true){if(set.contains(list)){return false;}sum=listSum(list);if(sum==1){return true;}else{set.add(list);list=getNewList(sum);}}}private List<Integer> getNewList(int num){List<Integer> list = new ArrayList<>();while(num/10!=0){int modRes=num%10;list.add(modRes);num/=10;}list.add(num); Collections.sort(list);return list;}private int listSum(List<Integer> list){int sum=0;for (Integer item : list) {sum+=item*item;}return sum;}
}

1. 两数之和

在这里插入图片描述

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map=new HashMap<>();for(int i=0;i<nums.length;i++){// 要在数组元素还未进Map集合时判断Map中是否有target-nums[i])if(map.containsKey(target-nums[i])){return new int[]{map.get(target-nums[i]), i};}//Map中,key是数组元素值,value是元素在数组中的下标map.put(nums[i],i);}return null;}
}

454. 四数相加 II

在这里插入图片描述

思路:将四个数组分为两组处理。

class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {Map<Integer, Integer> map=new HashMap<>();for(int i=0;i<nums1.length;i++){for(int j=0;j<nums2.length;j++){int sum = nums1[i]+nums2[j];map.put(sum, map.getOrDefault(sum, 0)+1);}}int count=0;for(int i=0;i<nums3.length;i++){for(int j=0;j<nums4.length;j++){int sum = nums3[i]+nums4[j];if(map.containsKey(-sum)){count+=map.get(-sum);}}}return count;}
}

383. 赎金信

在这里插入图片描述

class Solution {public boolean canConstruct(String ransomNote, String magazine) {// 将magazine中的字符以及对应出现的频率记录到Map中Map<Character,Integer> map=new HashMap<>();for(int i=0;i<magazine.length();i++){map.put(magazine.charAt(i),map.getOrDefault(magazine.charAt(i),0)+1);} for(int i=0;i<ransomNote.length();i++){char currentCh = ransomNote.charAt(i);if(!map.containsKey(currentCh)){return false;}else{map.put(currentCh,map.get(currentCh)-1);if(map.get(currentCh)==0){map.remove(currentCh);}}}return true;}
}

15. 三数之和

在这里插入图片描述
在这里插入图片描述

用了哈希表,时间超限,据说用排序+双指针思路简单且可行,后面刷到双指针的题再完成这个方法的题解。

class Solution {public List<List<Integer>> threeSum(int[] nums) {// key:两个元素的和    value:所有和等于key的元素组合,以下标的形式记录Map<Integer, List<List<Integer>>> map = new HashMap<>();for(int i=0;i<nums.length;i++){for(int j=i+1;j<nums.length;j++){// 将前两个元素包装到List中List<Integer> innerList=new ArrayList<>();innerList.add(i);innerList.add(j);int key=nums[i]+nums[j];if(!map.containsKey(key)){List<List<Integer>> outerList=new ArrayList<>();                outerList.add(innerList);map.put(key, outerList);}else{map.get(key).add(innerList);}}}Set<List<Integer>> resSet=new HashSet<>();  for(int k=0;k<nums.length;k++){if(map.containsKey(-nums[k])){List<List<Integer>> outerList=map.get(-nums[k]);for(List<Integer> innerList : outerList){if(!innerList.contains(k)){List<Integer> innerResList=new ArrayList<>();innerResList.add(nums[innerList.get(0)]);innerResList.add(nums[innerList.get(1)]);innerResList.add(nums[k]);Collections.sort(innerResList);resSet.add(innerResList);}}}}return new ArrayList<>(resSet);}
}

18. 四数之和

在这里插入图片描述
跟三数之和一样,也是排序+双指针,刷到双指针再做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能测试工具 ab(Apache Bench)使用详解

Apache Bench (ab) 是一个由 Apache 提供的非常流行的、简单的性能测试工具&#xff0c;用于对 HTTP 服务器进行压力测试。下面是 ab 工具的一些基本使用方法。 安装 在大多数 Unix 系统中&#xff0c;ab 通常作为 Apache HTTP 服务器的一部分预装在系统中。你可以通过在终端…

机器学习——模型融合:平均法

机器学习——模型融合&#xff1a;平均法 在机器学习领域&#xff0c;模型融合是一种通过结合多个基本模型的预测结果来提高整体模型性能的技术。模型融合技术通常能够降低预测的方差&#xff0c;提高模型的鲁棒性&#xff0c;并在一定程度上提高预测的准确性。本文将重点介绍…

每日一题:三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1…

Django项目定时任务django-crontab

首先定义一个定时任务函数tasks.py&#xff08;见文章末尾示例&#xff09;&#xff0c;编写函数&#xff0c;然后在setting.py中配置定时任务 1、首先安装django-crontab pip install django-crontab 2、在setting.py中添加应用 (在所有自定义注册app之上) INSTALLED_APPS …

基于SpringBoot的“汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“汽车租赁系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 管理员登录界面图 管理员功能界面…

LeetCode 2415. 2415. 反转二叉树的奇数层

解题思路 bfs&#xff0c;在奇数层的时候&#xff0c;将该层所有的值进行翻转。 相关代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.…

三、Redis持久化

目录 一、Redis持久化的原理 1、RDB方式&#xff1a; 2、AOF方式&#xff1a; 二、redis 持久化配置 1、RDB持久化相关配置 2、AOF持久化相关配置 一、Redis持久化的原理 Redis默认情况下&#xff0c;是把数据存储在内存中的&#xff0c;所有数据的写入&#xff0c;查询等…

【Linux】在 Linux 上模拟网络故障

文章目录 模拟网络丢包模拟网络延迟、抖动模拟网络包重复模拟网络带宽受限模拟网络错误模拟网络乱序重置网络清空所有规则 模拟网络丢包 # 在enp189s0f1网络接口上替换排队规则&#xff0c;应用netem规则来模拟30%的数据包丢失 tc qdisc replace dev enp189s0f1 root netem lo…

吴恩达2022机器学习专项课程(一) 第二周课程实验:多元线性回归(Lab_02)

1.训练集 使用Numpy数组存储数据集。 2.打印数组 打印两个数组的形状和数据。 3.初始化w&#xff0c;b 为了演示&#xff0c;w&#xff0c;b预设出接近最优解的值。w是一个一维数组&#xff0c;w个数对应特征个数。 4.非向量化计算多元线性回归函数 使用for循环&…

程序“猿”:现实世界的魔法师

在这个由代码构建的数字世界里&#xff0c;程序员就像现实世界中的魔法师。他们用键盘敲击出的符号和逻辑&#xff0c;创造出让人们生活变得更加便捷和丰富的软件和应用。但除了技术的高深莫测&#xff0c;你知道程序员们最喜欢什么吗&#xff1f;让我们一探究竟。 首先&#x…

【pycharm报错】rror: Microsoft Visual C++ 14.0 or greater is required.

一、报错 二、下载vs 路径&#xff1a;https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/ 三、安装 四、安装成功并启动 重新安装chromadb成功

springCloud-LoadBalancer负载均衡微服务负载均衡器LoadBalancer

2020年前SpringCloud是采用Ribbon作为负载均衡实现&#xff0c;但是在2020后采用了LoadBalancer替代 LoadBalancer默认提供了两种负载均衡策略&#xff08;只能通过配置类来修改负载均衡策略&#xff09; 1.RandomLoadBalancer-随机分配策略 2.RoundRobinLoadBalancer-轮询分配…

Linux IO的奥秘:深入探索数据流动的魔法

Linux I/O&#xff08;输入/输出&#xff09;系统是其核心功能之一&#xff0c;负责处理数据在系统内部及与外界之间的流动。为了优化这一流程&#xff0c;Linux进行了一系列努力和抽象化&#xff0c;以提高效率、灵活性和易用性。&#x1f680; 1. 统一的设备模型 Linux将所…

鸿蒙ArkTS开始实例:【canvas实现签名板功能】

使用ArkTS中的canvas实现签名板的功能&#xff0c;canvas画布大家都很熟悉&#xff0c;我们会用它经常实现一些画板或者图表、表格之类的功能。canvas签名板是我在开发APP过程中实现的一个功能&#xff0c;开发过程中也是遇到比较多的问题。我会按照以下几点来讲解开发整个过程…

使用docx4j转换word为pdf处理中文乱码问题

word转pdf 实现方法 mavendocx4j版本自己酌情升级 实现方法 import org.docx4j.Docx4J; import org.docx4j.fonts.IdentityPlusMapper; import org.docx4j.fonts.Mapper; import org.docx4j.fonts.PhysicalFonts; import org.docx4j.openpackaging.packages.WordprocessingMLP…

Qt 4.7作业

1、自由发挥应用场景实现一个登录窗口界面。 【可以是QQ登录界面、也可以是自己发挥的登录界面】 要求&#xff1a;尽量每行代码都有注释 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口标题this->setWindowTitle(&q…

模块十一 面向对象

回顾与重点 模块十回顾 继承&#xff1a;子类继承父类&#xff0c;可以直接使用父类中非私有成员&#xff0c;子类不用写重复性代码 关键字&#xff1a;extends 成员访问特点&#xff1a; a. 成员变量&#xff1a;看等号左边是谁 b. 成员方法&#xff1a;看new的是谁 方法的…

pytorch交叉熵

目录 1. Entropy2. 交叉熵3. 二分类4. 为什么分类问题使用交叉熵5. 代码示例 1. Entropy Entropy中文是熵的意思&#xff0c;它代表一种不确定性&#xff0c;不确定性越高惊喜度也就越高。 如上图&#xff0c;假设熵代表中奖概率&#xff0c;当熵为2 的中奖概率为1/4没什么惊…

数字乡村:科技引领新时代农村发展

随着信息技术的迅猛发展和数字化浪潮的推进&#xff0c;数字乡村作为新时代农村发展的重要战略&#xff0c;正日益成为引领农村现代化的强大引擎。数字乡村不仅代表着农村信息化建设的新高度&#xff0c;更是农村经济社会发展的重要支撑。通过数字技术的深入应用&#xff0c;农…

ICP的一点学习笔记

1. ICP算法相关 2.GICP算法笔记,参考http://www.roboticsproceedings.org/rss05/p21.pdfAbstract:在本文中结合ICP和点云面ICP算法到一个概率框架。接下来要使用这个框架进行局部平面结构而不是通常的点面方法。这个可以认为是面到面方法。与标准的ICP和点到面方法相比&#xf…