【代码随想录】哈希表

文章目录

  • 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.rhkb.cn/news/300590.html

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

相关文章

性能优化-如何爽玩多线程来开发

前言 多线程大家肯定都不陌生&#xff0c;理论滚瓜烂熟&#xff0c;八股天花乱坠&#xff0c;但是大家有多少在代码中实践过呢&#xff1f;很多人在实际开发中可能就用用Async&#xff0c;new Thread()。线程池也很少有人会自己去建&#xff0c;默认的随便用用。在工作中大家对…

什么是GIF?MP4视频如何转换成GIF动图格式?

一&#xff0c;什么是GIF GIF的全称是Graphics Interchange Format&#xff0c;可译为图形交换格式&#xff0c;用于以超文本标志语言&#xff08;Hypertext Markup Language&#xff09;方式显示索引彩色图像&#xff0c;在因特网和其他在线服务系统上得到广泛应用。GIF是一种…

NzN的数据结构--二叉树part1

你叉叉&#xff0c;让你学数据结构你不学&#xff1b;你叉叉&#xff0c;让你看二叉树你不看。 今天我们来一起学习二叉树部分&#xff0c;先赞后看是好习惯。 一、树的概念及结构 1. 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有…

合并主分支到子分支

参考&#xff1a;【Git】合并分支出现 Please enter a commit message to explain why this merge is necessary.-CSDN博客 git 如何将主分支(master)合并到子分支上_git 将主分支合并到子分支-CSDN博客 1、先切换到主分支master git checkout master 2、把主分支代码拉到本地…

【Threejs进阶教程-效果篇】1.Threejs文字与css2d/css3d技术

Threejs文字与css2d/css3d技术 学习ThreeJS的捷径学习之前先搞清楚自己想要什么样的效果贴图文字准备一张带文字的png贴图使用sprite来进行贴图实现2D始终面朝相机的文字使用planeGeometry来贴图实现3D文字使用planeGeometry来贴图实现伪3D文字动态贴图文字html2Canvas 文字几何…

Java8关于Function接口

Java学习-Function接口 1 函数式接口简介和学习地址2 两种常见的函数式接口2.1 Runnable&#xff1a;执行接口&#xff0c;不接收参数&#xff0c;也无返回结果。2.2 Consumer&#xff1a;作为消费接口&#xff0c;接收一个参数&#xff0c;无返回结果。 3 初识3.1 定义Functio…

Android详细介绍POI进行Word操作(小白可进)

poi-tl是一个基于Apache POI的Word模板引擎&#xff0c;也是一个免费开源的Java类库&#xff0c;你可以非常方便的加入到你的项目中&#xff0c;并且拥有着让人喜悦的特性。 一、使用poi前准备 1.导入依赖&#xff1a; 亲手测过下面Android导入POI依赖的方法可用 放入这个 …

OSPF实例是什么?

OSPF实例是什么&#xff1f; **OSPF实例指的是一个OSPF路由进程&#xff0c;它是在一个设备上运行的单独的OSPF路由协议实体**。 在详细解释这个概念之前&#xff0c;需要了解OSPF&#xff08;Open Shortest Path First&#xff09;是一种内部网关协议&#xff08;IGP&#x…

hive图形化客户端工具

hive准备 创建测试数据 以root用户登录&#xff0c;使用hive命令启动hive。 创建库 create database testhivedb; 创建表 create table testhivedb.testhivetable( id int ,name string ); 插入数据 insert into testhivedb.testhivetable values (1,cc); insert into…

Vscode连接WSL2当中的jupyter

主要解决办法参考自这篇博客 1. 在WSL当中安装jupyter 这个随便找一篇博客即可&#xff0c;比如这篇&#xff0c;也可以根据现有的环境参考其它博客内容 2. 使用jupyter创建一个虚拟环境 首先激活想要添加的虚拟环境后&#xff0c;输入命令安装库: pip install ipykernel …

HarmonyOS实战开发-如何实现分布式帐号相关的功能。

介绍 本示例主要展示了分布式帐号相关的功能&#xff0c;使用ohos.account.distributedAccount、ohos.account.osAccount等接口&#xff0c;实现了绑定分布式帐号、解绑分布式帐号、更新分布式帐号信息和管理分布式帐号的功能&#xff1b; 效果预览 使用说明 1.首次进入应用会…

Text-Driven Object Detection 关于结合文本的目标检测

1、简单介绍 首先说明&#xff0c;本文目的主要是水一篇CSDN博客&#xff0c;顺便说一下和标题相关的认识。 近几年&#xff0c;在目标检测领域关于多模态的目标检测工作已成了主流&#xff0c;趋势仍在延续&#xff0c;未来仍有很大挖掘空间。这里说的多模态不是简单的多源数…

element-ui使用记录

element-ui的组件名就是类名 样式穿透&#xff08;用来修改没有类名的子组件样式&#xff09; 例如修改头部具名插槽的样式&#xff08;但是无法定位该元素&#xff09; 查看最后生成的html结构中对应的结构&#xff08;这里的头部有类名&#xff0c;可以直接对该类名进行样…

【CicadaPlayer】demuxer_service的简单理解

G:\CDN\all_players\CicadaPlayer-github-0.44\mediaPlayer\SMPMessageControllerListener.cppplayer的demuxer服务类 std::unique_ptr<demuxer_service> mDemuxerService{nullptr};根据option (Cicada::options),可以决定音视频的不同操作,通过 hander可以获得具体使…

SpringCloud Alibaba Sentinel 创建流控规则

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十四篇&#xff0c;即介绍 SpringCloud Alibaba Sentinel 创建流控规则。 二、基本介绍 我们在 senti…

UltraScale 架构 SelectIO 资源之IODELAY与IOSERDES仿真与使用

平台&#xff1a;vivado2018.3 具体内容见ug571-ultrascale-selectio IDELAYE3 在调试超高速信号的时候&#xff0c;需要使用iodelayiserdes来调试校准输入信号。例如外部某ADC采样率为5GHZ&#xff0c;外部ADC使用2.5GHZ的时钟去采集输入信号。为了实现采集&#xff0c;adc芯…

90天玩转Python—05—基础知识篇:Python基础知识扫盲,使用方法与注意事项

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

如何搭建APP分发平台分发平台搭建教程

搭建一个APP分发平台可以帮助开发者更好地分发和管理他们的应用程序。下面是一个简要的教程&#xff0c;介绍如何搭建一个APP分发平台。 1.确定需求和功能&#xff1a;首先&#xff0c;确定你的APP分发平台的需求和功能。考虑以下几个方面&#xff1a; 用户注册和登录&#xff…

Stable Diffusion扩散模型推导公式的基础知识

文章目录 1、独立事件的条件概率2、贝叶斯公式、先验概率、后验概率、似然、证据3、马尔可夫链4、正态分布 / 高斯分布5、重参数化技巧6、期望7、KL散度 、高斯分布的KL散度8、极大似然估计9、ELBO :Evidence Lower Bound10、一元二次方程 1、独立事件的条件概率 A 和 B 是两个…

Vue项目打包成exe文件(electron)

1.将写好的vue项目打包 1.1运行vue ui命令 输出目标文件 如果打开index.html是空白的&#xff0c;而且控制台报错获取xxx资源失败的问题&#xff0c;你需要在vue.config.js 上加一个命令&#xff0c;如果没有你需要创建一个。 2.下载electron官方示例 git clone https://gith…