[代码随想录打卡Day6] 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 349. 两个数组的交集 1. 两数之和

之后补充Python的

哈希表理论基础

首先什么是哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)。

哈希表是根据关键码的值而直接进行访问的数据结构。

牺牲空间换取了时间.
哈希法用到的数据结构:数组,set(集合),map

242.有效的字母异位词

题意:判断两个字符串是否由相同字母组成
哈希值小,范围小,范围可控就可以使用数组这个数据结构.
数值很大的时候使用set
key对应有value就是用map

为什么使用哈希法:遍历一个字符串中的字母,判断是否再另一个字符串中出现.(给你一个元素判断集合中是否出现就用Hash)
用什么数据结构:题中说明了都是小写a-z,26个字母,范围小使用数组.
关键码的值:某个字符串中的所有元素

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 count: record){if(count != 0 ){return false;}}return true;下面是我根据视频讲解写的// int[] hash = new int[26];//先定义hash数组// if(s.length() != t.length()){//     return false;// }else{//     for(int i= 0; i< s.length(); i++){//         hash[s.charAt(i)-'a'] ++;//     }//     for(int i = 0; i < t.length(); i++){//         hash[t.charAt(i)-'a']--;//     }//     for(int i = 0; i<26; i++){//         if(hash[i]!=0){//             return false;//         }//     }// }// return true;}
}

349. 两个数组的交集

题意:给定两个数组,编写一个函数来计算它们的交集。
为什么使用哈希法:也就是遍历其中某个数组,查看其中的元素是否在另一个数组中出现过,就使用哈希法.
使用什么数据结构:如果没有表明数字范围,数字可以很大,就使用set.如果表明数字范围,数字范围这个是可控的,小的,使用数组更有效.
关键码的值:某个数组中的所有元素

/**
好好思考一下JAVA怎么使用hash set*/
class Solution {public int[] intersection(int[] nums1, int[] nums2) {//这个是Hash set的if(nums1==null || nums1.length==0||nums2==null||nums2.length==0){return new int[0];//其中任意一个为空,说明没有交集}Set<Integer> set1 = new HashSet<>();//这个就是建立Hash set,整体我感觉还是好理解的就是把其中一个数组Hash映射得到Hash Set,然后再遍历另一个数组查找判断得到的Hash set中是否存在这个数Set<Integer> resSet = new HashSet<>();//这个就是结果数组//遍历数组1,应该是往hash表中存数,我感觉是先经过了一次Hash映射for(int i : nums1){set1.add(i);//}//遍历数组2的过程中判断哈希表中是否存在该元素for (int i : nums2){if(set1.contains(i)){resSet.add(i);//存在就往结果set中添加元素}}//方法1将结果集合转换成数组return resSet.stream().mapToInt(x -> x).toArray();//转换成数组// //方法2:另外申请一个数组存放setRes中的元素,最后返回数组 // int[] arr = new int[resSet.size()];//初始化一个数组// int j = 0;// for( int i : resSet){//     arr[j++] = i;// }// return arr;}}
/**
好好思考一下JAVA怎么使用hash set*/
class Solution {public int[] intersection(int[] nums1, int[] nums2) {//再看一下用数组的形式的int[] hash1 = new int[1002];int[] hash2 = new int[1002];for(int i : nums1)hash1[i]++;//只要这个数存在就可以for(int i : nums2)hash2[i]++;List<Integer> resList = new ArrayList<>();for(int i = 0; i< 1002; i++)if(hash1[i]>0 && hash2[i]>0)resList.add(i);int index = 0;int res[] = new int[resList.size()];for(int i : resList)res[index++] = i;return res;}}

202. 快乐数

为什么使用哈希法:注意无限循环,说明如果其中sum重复出现就陷入无限循环.我们保存sum(每个数位的平方的和),然后判断sum是否重复出现,也就是当前的sum是否在过去sum的集合中出现过,就使用哈希法.
使用什么数据结构:这个题的数字没有限制范围,使用set
关键码的值:sum(当前数所有数位的数字的平方的和)

class Solution {public boolean isHappy(int n) {//试试JAVASet<Integer> record = new HashSet<>();//这个就是存储平方和的while(n!=1 && !record.contains(n)){//不是1就继续循环,然后如果record中没有就说明还没有陷入到死循环record.add(n);//往hash表中添加这个和n = getNeXtNumber(n);//就是变成单数的平方和}return n==1;}private int getNeXtNumber(int n){//这个很简单就是计算每个数位的数的平方和int res = 0;while(n > 0){int temp = n % 10;res += temp * temp;n = n/ 10;//移动到下一个数位}return res;}
}

1. 两数之和

为什么使用哈希法:因为它是遍历数组中的值,查找当前值对应的满足条件的另一个值是否在之前遍历过的值的集合中.
为什么使用map:因为这个题目是要返回下标,除了找到符合条件的元素还需要下标,两个值所以使用map
map的作用:存储遍历过的元素
map中的key分别存放什么:key存放元素值,value存放下标

class Solution {public int[] twoSum(int[] nums, int target) {int[] res = new int[2];//存放两个下标if(nums==null || nums.length==0){return res;}Map<Integer, Integer> map = new HashMap<>();//这个存放遍历过的元素for(int i = 0; i < nums.length; i++){int temp = target - nums[i];   // 遍历当前元素,并在map中寻找是否有匹配的keyif(map.containsKey(temp)){res[1] = i;res[0] = map.get(temp);break;}map.put(nums[i], i);    // 如果没找到匹配对,就把访问过的元素和下标加入到map中}return res;}
}

参考的题目、文章、视频

  1. https://programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E5%93%88%E5%B8%8C%E5%87%BD%E6%95%B0
  2. https://leetcode.cn/problems/valid-anagram/description/
  3. https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
  4. https://www.bilibili.com/video/BV1YG411p7BA/
  5. https://leetcode.cn/problems/intersection-of-two-arrays/description/
  6. https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html
  7. https://www.bilibili.com/video/BV1ba411S7wu/
  8. https://leetcode.cn/problems/happy-number/description/
  9. https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html
  10. https://leetcode.cn/problems/two-sum/
  11. https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
  12. https://www.bilibili.com/video/BV1aT41177mK/

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

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

相关文章

go中Println和Printf的区别

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 go中Println和Printf的区别 package mainimport ( "fmt" )//TIP To run your code, right-click the c…

矩阵NFC碰一碰发视频源码开发技术解析,支持OEM

一、引言 在当今数字化营销的热潮中&#xff0c;矩阵爆店码成为了助力商家引流推广的重要工具。开发矩阵爆店码的源码涉及到多种技术的综合运用&#xff0c;本文将深入探讨其开发过程中的关键技术要点。 二、技术选型 &#xff08;一&#xff09;后端开发技术 编程语言 选择一…

零基础嵌入式工程师成长路线以及如何学习嵌入式操作系统?

以下是一条零基础嵌入式工程师的成长路线&#xff1a; **一、入门阶段&#xff08;3 - 6个月&#xff09;** 1. **学习基础知识** - **编程语言**&#xff1a; C语言是嵌入式开发的基础。学习C语言的基本语法&#xff0c;包括数据类型&#xff08;如整型、字符型、浮点型&am…

数据结构之二叉树前序,中序,后序习题分析(递归图)

1.比较相同的树 二叉树不能轻易用断言&#xff0c;因为树一定有空 2.找结点值 3.单值二叉树 4.对称二叉树 5.前序遍历

C++设计模式结构型模式———组合模式

文章目录 一、引言二、组合模式三、总结 一、引言 组合模式是一种结构型设计模式&#xff0c; 可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们。代码实现中涉及了递归调用。组合模式与传统上的“类与类之间的组合关系”没有关联&#xff0c;不…

电子商城购物平台的设计与开发+ssm(lw+演示+源码+运行)

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;电子商城购物平台小程序被用户普遍使用&#xff0c;为方便…

用离线的方式(使用U盘)将Qt文件装载到开发板

第一步&#xff1a;打开虚拟机软件&#xff0c;加载Linux系统进入桌面 桌面 第二步&#xff1a;将U盘插入电脑&#xff0c;挂载到虚拟机中选择连接到虚拟机&#xff0c;虚拟机名称为alientek U盘接入虚拟机 第三步&#xff1a;将mp157开发板一端连接在USB_TTL接口&#xff…

Android 字节飞书面经

Android 字节飞书面经 文章目录 Android 字节飞书面经一面二面 一面 1. 线程是进程的一部分&#xff0c;一个线程只能属于一个进程&#xff0c;而一个进程可以有多个线程&#xff0c;但至少有一个线程。 2. 根本区别&#xff1a;进程是操作系统资源分配的基本单位&#xff0c;…

针对告警数量、告警位置、告警类型等参数进行统计,并做可视化处理的智慧能源开源了。

一、简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算…

Linux系统的入门使用

前言一、常用操作以及概念 快捷键求助关机PATHsudo包管理工具发行版VIM 三个模式GNU开源协议 二、磁盘 磁盘接口磁盘的文件名 三、分区 分区表开机检测程序 四、文件系统 分区与文件系统组成文件读取磁盘碎片blockinode目录日志挂载目录配置 五、文件 文件属性文件与目录的基本…

软考系统分析师知识点三二:案例知识点三

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间&#xff1a;11月9日。 倒计时&#xff1a;5天。 目标&#xff1a;优先应试&#xff0c;其次学习&#xff0c;再次实践。 复习计划第三阶段&#xff1a;总结案例知识点&#xff0c;并作为论文的框架知识…

无人机维护保养、部件修理更换技术详解

无人机作为一种精密的航空设备&#xff0c;其维护保养和部件修理更换是确保飞行安全、延长使用寿命的重要环节。以下是对无人机维护保养、部件修理更换技术的详细解析&#xff1a; 一、无人机维护保养技术 1. 基础构造理解&#xff1a; 熟悉无人机的基本构造&#xff0c;包括…

高校大数据实训平台介绍

高校大数据实验室架构 具体实训平台介绍 编程实训平台 1、大数据开发实训平台 大数据开发实训平台是面向实训课和课后训练的编程实训平台&#xff0c;平台底层基于Docker技术&#xff0c;采用容器云部署方案&#xff0c;预装大数据相关课程教学所需的实训环境…

SQL基础—2

1.左外连接查询&#xff08;left join on&#xff09; A - A∩B 左外连接查询两张表条件都满足的数据&#xff0c;以及左边表(A表)存在的数据(以左边表为主查询表)。 A - A∩B (A和A交B)。 示例&#xff1a;使用左外连接将dept表作为主查询表&#xff0c;查询员工编号、员工姓…

R语言贝叶斯:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析

原文链接&#xff1a;R语言贝叶斯&#xff1a;INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa23c6…

如何自学机器学习?

自学机器学习可以按照以下步骤进行&#xff1a; 一、基础知识准备 数学基础&#xff1a; 高等数学&#xff1a;学习微积分&#xff08;包括导数、微分、积分等&#xff09;、极限、级数等基本概念。这些知识是后续学习算法和优化方法的基础。 线性代数&#xff1a;掌握矩阵…

wpf 制作丝滑Flyout浮出侧边栏Demo (Mahapps UI框架)

Flyout 属性 CloseButtonVisibility: 设置为 Collapsed&#xff0c;意味着关闭按钮不可见。TitleVisibility: 设置为 Collapsed&#xff0c;意味着标题不可见。IsPinned: 设置为 True&#xff0c;意味着这个 Flyout 会固定住&#xff0c;不会自动关闭。Opacity: 设置为 1&…

6个步骤,轻松搞定Linux上web UI自动化测试!

对于web端的UI自动化&#xff0c;相信大家都不会陌生&#xff0c;因为很多小伙伴都做过&#xff0c;或者了解到过&#xff0c;但是小编相信&#xff0c;大多数了解到的都是通过windows系统上进行运行web端的UI自动化&#xff0c;在linux上面很少运行UI自动化或者如何执行自动化…

[论文阅读]Label-Only Membership Inference Attacks

Label-Only Membership Inference Attacks Proceedings of the 38th International Conference on Machine Learning Label-Only Membership Inference Attacks 只使用硬标签就可以判断是否是成员的方法&#xff0c;但是是在机器学习模型上。 通过分析模型在扰动下的预测标…

万宇科技闪耀创新舞台 荣膺潜在独角兽企业殊荣

2024年10月24日&#xff0c;在“2024东北亚(沈阳)人才交流大会暨中国潜在独角兽企业发展大会”上&#xff0c;长城战略咨询重磅发布《GEI中国潜在独角兽企业研究报告2024》&#xff0c;揭示了中国潜在独角兽企业群体的最新发展态势。其中&#xff0c;安徽万宇机械设备科技有限公…