代码随想录 算法训练营 d6 哈希表 Leetcode242 有效的字母异位词 Leetcode349 两个数组的交集 Leetcode202 快乐数Leetcode1 两数之和

news/2024/10/5 1:20:51

哈希表 很重要

哈希表

哈希表 场景 一般哈希表都是用来快速判断一个元素是否出现集合里

一般来说 数组模拟 哈希set  哈希map 不同的场景

 

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法

但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。

如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!

Leetcode242 有效的字母异位词

题目链接

若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

用哈希表 去保存字符串的次数 如果最后归0 则是异位词

class Solution {public boolean isAnagram(String s, String t) {int[] record = new int[26];for(int i = 0;i<s.length();i++){record[(s.charAt(i)-'a')]++;}for(int i = 0;i<t.length();i++){record[t.charAt(i)-'a']--;}for(int i = 0;i<record.length;i++){if(record[i]!=0){return false;}}return true;}
}

Leetcode349  两个数组的交集

题目链接

给定两个数组 返回交集 元素唯一

思想:看到元素唯一 可以想到用哈希表的set结构 先 设置一个哈希表存储第一个数组

然后设置一个结果哈希表,遍历第二个数组的时候 如果第一个哈希表中存在 那么添加到结果哈希表中即可

注意 hashset用法 以及 流的使用

class Solution {public int[] intersection(int[] nums1, int[] nums2) {if(nums1==null||nums2==null||nums1.length==0||nums2.length==0){return new int[0];}Set<Integer> reset = new HashSet<>();Set<Integer> set1 = new HashSet<>();for(int i = 0;i<nums1.length;i++){set1.add(nums1[i]);}for(int i = 0;i<nums2.length;i++){if(set1.contains(nums2[i])){reset.add(nums2[i]);}}return reset.stream().mapToInt(x -> x).toArray();}
}

Leetcode202 快乐数

题目链接

注意此题  也可能是 无限循环 但始终变不到 1  非常关键

会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。

这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。

class Solution {public boolean isHappy(int n) {Set<Integer> sum = new HashSet<>(); while(n!=1&& !sum.contains(n)){sum.add(n);n = getNext(n);}if(n==1){return true;}else{return false;}}public int getNext(int n){int a = 0;while(n>0){int temp = n%10;temp = temp*temp;a+=temp;n/=10;}return a;}
}

Leetcode1 两数之和

题目链接

经典哈希表题目 

理清思路 用哈希表存储元素和他的需要的值

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

需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适

map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)

 

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

矩阵乘法与矩阵快速幂

1 矩阵乘法 1.定义 若矩阵A的大小为\(n \times m\),矩阵B的大小为\(m \times p\),则两个矩阵可以做乘法,得到的矩阵C的大小为\(n \times p\)。 \[A = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{bmatrix} \]\[B = \begin{…

Redis之哨兵模式

概述无哨兵模式的主从切换的方法是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。 Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题…

ibus-libpinyin无法使用中括号下一页(未解决)

问题 中括号切换上下页用惯了,使用这个不能【】真不习惯。 SunPinyin sunpinyin可以[]切换,但是【】本身变成其他字符了。 不能使用shift将半路的中文换为英文。比如我打拼音,输入完后按shift,我希望他变成英文,并且切换到英文。 搜狗输入法 系统是Ubuntu 22.04 搞了半天用…

m基于FPGA的FIR低通滤波器实现和FPGA频谱分析,包含testbench和滤波器系数MATLAB计算程序

1.算法仿真效果 本系统进行了Vivado2019.2平台的开发,Vivado2019.2仿真结果如下:整体仿真结果如下:放大看,滤波效果如下:对应的频谱如下:FPGA的RTL结构如下:最后用matlab对比仿真,结果如下:可以看到,FPGA的滤波效果和频谱分析与matlab的结果一致。2.算法涉及理论知识…

ch6 信息商品

ch6 信息商品课程目标熟悉信息商品的形成和信息劳动价值理论 掌握信息商品的特征分析及信息商品的价格理论 运用信息商品价格理论分析和理解相关案例多看两眼 ppt 吧,这一部分考的很多 知识回顾 信息商品的概念信息成为商品的基本条件 不宜成为信息商品的信息产品类型 信息商品…

原始套接字

解析MAC数据包原始套接字-解析MAC数据包 原始套接字.c 套接字类型 原始套接字 1、一种不同于SOCK_STREAM、SOCK_DGRAM的套接字,它实现于系统核心 2、可以接收本机网卡上所有的数据帧(数据包),对于监听网络流量和分析网络数据很有作用 3、开发人员可发送自己组装的数据包到网…

http与cJSON练习

http与cJSON练习 /**************************************************************************************************** * weather_test.c * 练习tcp连接,与http协议,调用服务器接口,实现获取特定城市的天气信息…

多线程实现并发

多线程实现并发案例多线程并发服务器 架构 void* thread_fun(void* arg) {while(1){recv()/send()} }scokfd = socket() bind() listen() while(1){accept()//连上就创建线程pthread_create(, ,thread_fun, )pthread_detach() }案例 /* # Multi-process concurrent server…