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

算法训练营第五天 | 哈希表理论基础、 242.有效的字母异位词、349. 两个数组的交集、 202. 快乐数、1. 两数之和

哈希表理论基础

哈希表内部实现原理: 哈希表是根据关键码的值而直接进行访问的数据结构。人话就是,哈希表就是一个数组,关键码就是下标,哈希函数就是计算下标的函数。

哈希函数: 计算下标的函数,决定数据存放在哈希表的位置

哈希碰撞: 两个数据通过哈希函数计算出来的下标相同。
哈希碰撞解决方案:

  • 拉链法
    在这里插入图片描述

  • 线性探索法
    在这里插入图片描述

常见哈希表的区别:

  • 数组:

  • set:在这里插入图片描述

  • map:在这里插入图片描述

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

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

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

242.有效的字母异位词

题目

在这里插入图片描述

思路与解法

第一想法: 使用字典来存储一个字符串中每个字母出现的次数,再用另一个去对比

class Solution:def isAnagram(self, s: str, t: str) -> bool:set_s = dict()for a in s:if set_s.get(a, False):set_s[a] += 1else:set_s[a] = 1for b in t:if set_s.get(b, False):set_s[b] -= 1if set_s[b] < 0:return Falseelse:return Falsefor key,value in set_s.items():if value > 0:return Falsereturn True

349. 两个数组的交集

题目

在这里插入图片描述

思路与解法

第一想法:

# Counter会自动为nums1创建一个字典,key是nums1中的每个元素,value是数量
class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:from collections import Countercounter1 = Counter(nums1)res = set()for i in nums2:if i in counter1:res.add(i)return list(res)

202. 快乐数

题目

在这里插入图片描述

思路与解法

第一想法: 没想出来
carl的讲解: 重点在于,不是快乐数,结果会重复出现

class Solution:def isHappy(self, n: int) -> bool:record = set()while n not in record:record.add(n)sum = 0for i in str(n):sum += int(i) ** 2if sum == 1:return Truen = sumreturn False

1. 两数之和

题目

思路与解法

第一想法: 遍历数组,将target - nums[i]存入字典,key为target - nums[i], value为i(下标)。每次遍历都去字典中找有没有自己,有的话证明之前有过和自己相加等于target的值出现,这时就返回自己的i和record中记录的i

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:record = dict()for i in range(len(nums)):if nums[i] in record:return [i,record[nums[i]]]else:record[target-nums[i]] = i## 改进
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:record = dict()for index, num in enumerate(nums):if num in record:return [index,record[num]]else:record[target-num] = index

相关文章:

  • 最新Spring Security实战教程(十三)会话管理机制 - 并发控制与会话固定攻击防护
  • qnn-2-27 sdk 环境配置示例
  • 逆向设计——CWDM_splitter
  • 8.2 段落格式
  • 一文了解 模型上下文协议(MCP)
  • 数据库Mysql学习——day7(多表查询(JOIN)进阶)
  • 检测图片指定多个位子像素坐标与目标比较。外部图像识别。如红色,黄色,绿色。。。
  • HTML 从标签到动态效果的基础
  • [计算机科学#4]:二进制如何塑造数字世界(0和1的力量)
  • JAVA:线程池
  • H3C华三:单臂路由配置
  • 用Postman验证IAM Token的实际操作
  • 2025年五一数学建模竞赛AI辅助全网专业性第一
  • 网络安全入门综述
  • 乐理学习笔记(一)---节拍与音符
  • Python依据卫星TLE轨道根数,计算可见时间窗口
  • CMake:设置编译C++的版本
  • 卧式五轴加工中心市场报告:智能制造浪潮下的机遇与挑战
  • 国内外都有哪些医药医学方面的指南检索数据库?
  • 基于强化学习的用于非刚性图像配准的引导式超声采集|文献速递-深度学习医疗AI最新文献
  • 新华每日电讯:从上海街区经济看账面、市面、人面、基本面
  • 物业也能成为居家养老“服务员”,上海多区将开展“物业+养老”试点
  • 全球首台环形CT直线加速器在沪正式开机,系我国自主研发
  • “一对一讨论诸多事宜”,泽连斯基披露此次特泽会更多细节
  • “90后”高层建筑返青春:功能调整的技术路径和运营考验
  • 居民被脱落的外墙瓦砖砸中致十级伤残,小区物业赔付16万元