哈希算法在考研机试中的题目几乎都可以用map来解决。
哈希的几种考法如下
1、输入N个数,统计某个数出现的次数。
解:使用辅助数组进行标记
2、输入N个数,进行排序或求前K小的数,其中数值的区间范围小。
解:使用辅助数组进行标记,如果值为负数或很大,将区间进行平移即可
3、有多段区间进行覆盖,问其中某个点被覆盖到的次数。
解:使用辅助数组进行标记,直接遍历每一段区间累加上去。
上面这几种勉强可列为哈希算法的范围,其实都是对数组的一种应用技巧,使用数组下标对应存储的值,数组存的值是出现的次数。
4、给一个等式a+b+c+d=0,其中a,b,c,d的范围是[-50,50],求a,b,c,d使得等式成立的值。
解:如果直接暴力枚举,那么复杂度是O(n^4),我们可以将等式移项变成a+b=-(c+d),我们分别枚举a+b的值存起来,-(c+d)的值存起来,复杂度是O(n^2),那么问题就转化成了,比较两个数组中相同的值的个数。可以用二分查找的方法,也可以用map,还可以自己构造哈希函数,最终的时间复杂度是O(n^2log(n^2))。
5、输入n个字符串,问相同的字符串的个数
解:很典型的字符串哈希,建议用map,基本都能解决。
练习题目
DreamJudge 1329 统计同成绩的学生人数
DreamJudge 1225 谁是你潜在朋友
DreamJudge 1175 剩下的树
DreamJudge 1209 刷出一道墙
登录后开始许愿
暂无评论,来抢沙发