代码随想录刷题-哈希表

文章介绍了哈希表在解决编程问题中的应用,如处理哈希碰撞、计算字母异位词的有效性、找出数组交集、判断快乐数以及解决各种和的问题,包括两数、三数和四数之和。文中提到了拉链法和线性探测法解决冲突,以及双指针法作为另一种策略。
摘要由CSDN通过智能技术生成

理论基础:哈希表就是根据key值来访问对应的数据结构。

哈希碰撞:元素个数大于哈希表的大小,多个元素映射到哈希表的同一个索引下标的位置。

 解决办法:拉链法,线性 探测法

       

 发生冲突的元素放到链表中;向下找一个空位置放冲突的元素。.

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

242.有效的字母异位词

把字符映射到哈希表的索引下标上,遍历字符串s时,将s[i]-'a'所在元素加1;这样就统计出了s字符串中字符出现的次数。遍历字符串t时,字符对应的索引上的数值-1;最后检查数组元素是否都为0;

349.两个数组的交集

输出结果中的元素都是唯一的,不重复的,而且不用考虑输出结果的顺序。

for(int num:nums2){

            if(nums_set.find(num)!=nums_set.end())//如果找不到会返回末尾的迭代器,所以判断迭代器是不是末尾迭代器。
             {

                result_set.insert(num);

            }

        }

202.快乐数

可能会无限循环,那么求和过程中,sum会重复出现。

如果sum重复出现了,就return false,否则一直找到sum=1为止。

把求和的过程写成一个函数,循环调用。

1.两数之和

用unordered_map

遍历数组,去map集合里查询是否有匹配的数值,并把遍历过得数放到map中。

数组元素作为key,元素下标作为value。

 对map使用不熟练。

454.四数之和二

map的下标操作:他可以接受一个索引,获取与此关键字相关联的值。

先统计A、B两个数组中各个元素之和,并统计和出现的次数,放到map中。

再遍历C、D两个数组,如果0-(c+d)在map中出现的话,count次数就加上map中key对应的val值。这就是次数。

383.赎金信

哈希解法

先用长度为26的数组记录magazine里字母出现的次数,然后再遍历ransomNote字符串,比较该数组中是否包含所需的所有字母。

15.三数之和

哈希法:两层for循环确定a和b的值,再用哈希法确定0-(a+b)是否在数组里出现过。

双指针法:一层for循环,i遍历数组,left指向i+1的位置,right指向数组结尾。根据三处位置的和移动指针。

18.两数之和

四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值