hash函数:映射与算法,利用数组的随机存取

  • 众数问题
题目一:统计相同成绩(0~100的整数)的学生集中出现的分数
题目二:统计字符串中出现频率,找到最高频的字符
题目三:给出一段仅有大小写字母构成的字符串,找出使用频率最高的按键(输出大写)

f(x) ,x是一个代指、名字,f(x)记录这个名字的一个属性,这里具体来说:
第一题,scoreTimes[score],初始化为0,遇到score1,即做scoreTimes[score1]++。
第二题,charTimes[char]
第三题,charTimes[大写-‘A’]等同于charTimes[小写-‘a’],其中,大写-‘A’,小写-‘a’也是一种映射。
简单的像:x—>g(x)------>f(g(x))

  • 使用过、有效无效问题
问题一:给出一些足球队和其球员的收入,输出年薪超过m千万的球队
问题二:开门问题,第一次把一的倍数的门打开,第二次关上二的倍数,在之后打开三的倍数……多次之后问那些门关上了?
问题三:给出一些字符串,问当部分字符无效后,应输出什么结果?

第一个,used【队伍】=false,使用过就标记为true
第二个,open【门的编号】=false,调整一次反转一次
第三个,删除(无效)等价于,先都无效,再给出所用的部分有效,最后拿当前无效的检查

  • 包含、组合问题
问题一:小李有一栋房子,三辆车,小王有三栋房子,四辆车,(假定车之间,房之间并无差别),试着验证小王的资产可以包含几个小李?
问题二:现又一些正整数,给出一个数M,问是否存在这样两个数之和等于M,且这两个数最接近。(15=7+8

第一个,计算小李的(车)、小王的(车),保证后者不小于前者。
车—0
房—1
小李—li[2]
小王—wang[2]
第二个,频率(数1),频率(M-数1)都不为零。特别的当这两个数相同时,频率应不小二。

  • 嵌套问题x—>g(x)------>f(g(x))
问题一:给出队伍的名称,字符串,以及多场得分,统计得分最高的队伍并输出
问题二:给出学生的编号,和一些成绩,计算并输出各科第一的学生

第一个,首先,名字映射为唯一区分的数字;
第一种方法已知全部队伍名字,记录到名字表中,用下标访问(代指)
第二种为名字name设置一个哈希函数,hash【name】即为索引下标
最后,score【队伍】就可以实现了,score【hash【队伍】】

第二题,如果编号像这样201401,你可以直接当成数字下标来映射学生。

名次 语文 数学 英语
2001 2 3 1
2002 3 1 2
2005 2 3 2
2003 1 2 3

即得到—>名次【学生】【科目】

猜你喜欢

转载自blog.csdn.net/qq_34890856/article/details/105676332