卡尔算法哈希表
一:有效的字母异位词
part1·题意:给出两个字符串,判断是否可以更改字符串内字母的顺序,从而使得两个字符串的单词一样。注意该题目认为两个相同字母顺序的字符串也是相同的。同样也返回true。即题目让我们判断两个字符串中字母是否相同,位置不一样也行。判断s1是否为s2的有效字母异位词。字母都由小写字母组成(连续)。
part2·哈希法解题:此时要求我们判断一个集合中的元素是否与另外一个集合中的元素是否相同。立马想到哈希表
由于只有26个字母,数据比较小。所以可以用hash【】来解决问题。大体步骤就是将s1中出现的字母对应到hash数组相应的位置++。再将s2中出现的字母对应到hash中--。最后看hash数组是否所有值为零即可。
part3·代码实现:关键就是将s1中‘a’放到hash【0】,以此类推。hash(s【i】-‘a’)++
最后映射完了就遍历一遍hash数组判断是否全为0即可
part4·总结:哈希的题目能用数组就用数组,因为用数组简单。
二:两个数组的交集
part1:解题思路:给出两个数组,需要输出交集数组。这个交集数组要求元素不能重复。数据小于1000。
此时要求我们判断一个集合中的元素是否与另外一个集合中的元素是否相同。立马想到哈希表
part2:set解决:弄一个set,用来存num1并且去重,然后再遍历num2看他的元素是否在set里面,在就输出该元素到result里面
首先将num1放入num-set中。在判断num2中单元素是否在num-set中,如果在,则将该元素放入result中。由于题目要求最后返回的是数组,所以可以用vector将result转化为数组
由于要去重,且要查询set里面的元素,可以考虑unordered-set。
创建vector数组与函数
数组与set之间的相互转换:vector《int》
新的for循环遍历方法:for(int num:num2),将nus2中元素赋值给num
三·两数之和
题目要求返回元素下标,使用数组和set显然不能得到下表。因此使用map。将遍历过的元素放入map中,下标放入value的位置,元素值放入key的位置
四·四数相加
两两遍历数组,将a,b数组的和存入map的key值,value存入出现次数。再看c,d数组加起来的值的相反数是否在map中出现过。出现了value就是元组的数量,这道题要求返回数量,用map是比较合适的
浙公网安备 33010602011771号