测试员的算法面试题-找众数

码同学抖音 :小码哥聊软件测试

算法面试—找众数

前提:

现在测试工程师的面试,或多或少都会问到编程技术.在编程技术中,往往会挑选一个简单的算法题.很多同学一看到这,往往就不知如何是好了.后果轻则被压低薪水,重则失去这次面试机会.

其实面试中的算法,可以通过刷题来进行准备.下面分享下最近面试遇到的算法面试题

题目-寻找一个列表中的众数

给定一个大小为n的数组,找到其中的众数

*众数:是指在数组中出现次数大于”n/2″的元素

示例:

给定数组:list = [1,2,5,5,5,5,7]

预期输出: 5

LV1:直接解题

先用最直接的方式,尝试转化题目


对于大于”n/2″这条需求,可以先求出n


找到数组里的众数,可以理解为:在数组中进行循环比较.

条件是 当前元素出现次数(list.count()函数可以得出)大于 n/2

如果符合条件,则存到res变量中

对于大于”n/2″这条需求,可以先求出n


由于循环中,会把每一个众数都加到结果中得到如下结果

[5, 5, 5, 5]

所以在加一部去重复数据

return set(res)

结果:

Lv2:简化

上述方案中,力求快速实现需求.在细节上比较冗余,这里在进行一步简化.


免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以转发文章 + 私信「码同学666」获取资料哦

效果如下:

LV3效率优化

从功能的角度来说,上述方案是可行的.但是一旦遇到海量数据,重复计算list.count()非常耗时.如图:

这个测试数据中有5w+个元素,计算非常巨大

重新思考题目中的众数,发现几个特性:

①一个数组中最多只有1个众数(不会出现2个过半数的元素)

②如果数组是从大到小排列(list.sort()函数可以进行排序),那么中间的那个数字一定是众数

③对于数组而言,也分奇数/偶数元素

如果是奇数


如果是偶数


重写:


效果如图:

结论:速度比起直接解法,快了20倍以上

END

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月23日
下一篇 2022年1月23日

相关推荐