算法-(383哈希表赎金信)

devtools/2024/9/24 1:28:22/

这道题可以利用哈希表来做。我们首先来了解以下哈希表

哈希表是一种强大的数据结构,因为它能够在平均情况下提供常数时间复杂度的查找、插入和删除操作。这使得它在实现字典、集合以及缓存等场景中非常高效。

主要特点

  1. 快速查找:通过哈希函数将键映射到存储位置,可以快速找到对应的值。
  2. 动态调整:多数实现会根据负载因子自动调整大小,以保持高效性能。
  3. 键值存储:适合用于键值对数据。

常见应用

  • 缓存:快速存储和检索数据。
  • 计数:统计元素出现次数。
  • 去重:快速判断元素是否存在。

哈希表在很多编程语言中被广泛使用,如 C++ 的 unordered_map,Python 的 dict 等。

 

哈希表的底层结构通常由以下几个部分组成:

1. 数组

  • 用于存储数据的主要结构。
  • 每个位置称为一个“桶”。

2. 哈希函数

  • 将键映射到数组的索引。
  • 决定元素存储的位置。

3. 处理冲突

由于不同的键可能映射到同一个索引,需要解决冲突:

  • 链地址法:每个桶中存储一个链表或其他结构来处理多个元素。
  • 开放寻址法:寻找下一个空的桶来存储元素。

4. 负载因子

  • 衡量哈希表的填充程度。
  • 超过阈值时会动态扩展数组以保持性能。

5. 再哈希

  • 扩展数组并重新分配元素以减少冲突。
class Solution {
public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char,int>charcount;//记录ransomNote里面每个字符出现的次数for(char c:magazine){charcount[c]++;}//判断magazine字符在ransomNote里面是否存在for(char c:ransomNote){if(charcount[c]==0){return false;}charcount[c]--;}return true;}
};

解释

  1. 创建哈希表:使用 unordered_map 来存储 magazine 中每个字符的数量。
  2. 统计字符数量:遍历 magazine,更新每个字符的计数。
  3. 验证字符可用性:遍历 ransomNote,检查并减少对应字符的计数。如果某个字符不够用,直接返回 false
  4. 返回结果:如果所有字符都满足条件,则返回 true

http://www.ppmy.cn/devtools/98503.html

相关文章

Git 的基本概念和使用方式

Git是一种分布式版本控制系统&#xff0c;用于跟踪文件的更改并协同多人开发项目。它具有以下基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git使用仓库来存储项目的文件和历史记录。仓库可以是本地的&#xff08;在本地计算机上&#x…

T/CECS 10035-2019 绿色建材评价 金属复合装饰材料

一、绿色建材 绿色建材是指在全生命周期内减少对天然资源消耗和减轻对生态环境影响&#xff0c;具有节能、减排、安全、便利和可循环的建材产品&#xff0c;获得绿色产品证书的产品在实际招投标以及品牌宣传中具有绝对优势。 二、认证模式 初始工厂检查产品抽样检验获证后监督…

Nvidia AI 发布 Llama-Minitron 3.1 4B:通过修剪和提炼 Llama 3.1 8B 构建的新语言模型

Nvidia 刚刚发布了语言模型的新版本&#xff0c;不过这次是一个小型语言模型&#xff1a;Llama-3.1-Minitron 4B 模型。这意味着它是语言模型不断发展的重要步骤之一&#xff0c;通过剪枝和知识提炼等尖端技术&#xff0c;将大型模型的效率与小型模型相结合。 Llama-3.1-Minitr…

【ARM 芯片 安全与攻击 5.1 -- 瞬态攻击(Transient Execution Attack)】

文章目录 瞬态攻击(Transient Execution Attack)推测执行攻击乱序执行攻击瞬态攻击在 ARM 中的应用Spectre 攻击在 ARM 中的应用示例防御瞬态攻击的措施硬件层面软件层面Summary瞬态攻击(Transient Execution Attack) 瞬态攻击(Transient Execution Attack)是一种利用现…

qt笔记之qml中的TextEdit、TextInput、TextArea、TextField的区别

qt笔记之qml中的TextEdit、TextInput、TextArea、TextField的区别 code review! 文章目录 qt笔记之qml中的TextEdit、TextInput、TextArea、TextField的区别一.对比二.C环境中类似功能的控件 一.对比 TextEdit、TextInput、TextArea和TextField都是用于文本输入的组件&#…

关于 瑞芯微的 adb 的使用

步骤&#xff1a; 1 首先是 需要在 andorid 系统中&#xff0c; 在开发者选项中&#xff0c; 是能&#xff0c;USB调试 然后设置传输为文件传输&#xff08;这个一般的板卡已经做好了&#xff0c;不用改&#xff09; 2 然后在PC端 使用驱动精灵安装一个 adb 驱动&#xff0c…

嵌入式学习——(Linux高级编程——线程控制)

线程的互斥 一、互斥的重要性 在多线程编程中&#xff0c;互斥机制至关重要。当多个线程同时访问临界资源时&#xff0c;如果没有有效的互斥控制&#xff0c;可能会导致数据不一致、资源竞争等问题。通过互斥锁&#xff0c;可以确保在任何时刻只有一个线程能够访问临界资源&am…

数据库范式

相关概念 函数依赖 这里我纯白话解释了&#xff0c;纯概念去百度查。 我们设 R(U) 是属性集合 U 的一个关系模式&#xff0c;可以理解为一张表就算关系 R&#xff0c;里面的属性的集合就是 U。 其中 U {学号,姓名,年龄,身份证号,系名,系位置,课号,成绩}。 名词 概念解释 …