代码随想录算法训练营第六天|242 有效的字母异位词

文章讲述了在C++编程中如何使用哈希表(unordered_set和unordered_map)优化字母异位词检测、数组交集计算以及快乐数检测的问题,强调了哈希表在查询和关联数据方面的高效性。
摘要由CSDN通过智能技术生成
242 有效的字母异位词

C

  1. 如果使用C来写。我需要使用俩个26长的数组,遍历俩个词,存储对应字母的数量,最后比较俩个数组的每一位是否相等。

还是使用C++吧。

C++

在网站题解里,也是使用上面的想法,不过他只需要使用一个数组,遍历第二个数组的时候减去数值即可。更优化。
一次实现。

349 俩个数组的交集

如果使用数组,那么需要至少1000长。

那么这里会使用std::unordered_set。底层使用hashtable实现,不支持[]访问符,无序,不重复。访问元素O(1),冲突严重时退化成O(n)。

先遍历第一个数组,将所有元素放入unordered_set中,再遍历第二个数组,使用容器提供的find()方法,确定是否存在,存在就存入另一个vector中

原来在c++中支持使用vector容器直接初始化unordered_set,而且最后还需要先放入set中再放入vector中实现去重
一次实现

202 快乐数

可以使用双指针检测循环,移动方法就是计算俩次平方和

1. 俩数之和

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

那我可以使用这个数组构建一个使用数组的数值作为key,数组的下表作为值的value。接着再遍历数组,寻找targer-cur这个数值是否存在,存在就返回,否则就跳过

原来不需要先创建这个map,而是边遍历边创建,没有查到就添加。这个数组中如果存在这样的一对,那么在这一前一后肯定会被找到

unordered_map的find()返回值类型是该容器的iterator类型,是LegacyForwardIterator类型的迭代器,这种类型迭代器使用*解引用会得到该种容器的value_type类型,unordered_map容器的value_type类型是 std::pair<const Key, T>,可以使用first和second方法访问第一和第二个元素

思考题

本题其实有四个重点(1. 俩数之和):

为什么会想到用哈希表
哈希表为什么用map
本题map是用来存什么的
map中的key和value用来存什么的

把这四点想清楚了,本题才算是理解透彻了。

很多录友把这道题目 通过了,但都没想清楚map是用来做什么的,以至于对代码的理解其实是 一知半解的。

  1. 之所以使用哈希表,因为i这里有需要检查某个数是否存在的需求
  2. 使用map是我需要同时获得值和下标的对应关系
  3. 数组的之是key,下标是value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值