当前位置:网站首页>测试员的算法面试题-找众数
测试员的算法面试题-找众数
2022-07-04 19:22:00 【码同学软件测试】
算法面试—找众数
前提:
现在测试工程师的面试,或多或少都会问到编程技术.在编程技术中,往往会挑选一个简单的算法题.很多同学一看到这,往往就不知如何是好了.后果轻则被压低薪水,重则失去这次面试机会.
其实面试中的算法,可以通过刷题来进行准备.下面分享下最近面试遇到的算法面试题
题目-寻找一个列表中的众数
给定一个大小为n的数组,找到其中的众数
*众数:是指在数组中出现次数大于"n/2"的元素
示例:
给定数组:list = [1,2,5,5,5,5,7]
预期输出: 5
LV1:直接解题
先用最直接的方式,尝试转化题目
def func(num:list): #定义一个函数,接收"列表"数据
res = [] #定义一个变量接收结果
对于大于"n/2"这条需求,可以先求出n
n = len(num) #用len函数得到n
找到数组里的众数,可以理解为:在数组中进行循环比较.
条件是 当前元素出现次数(list.count()函数可以得出)大于 n/2
如果符合条件,则存到res变量中
对于大于"n/2"这条需求,可以先求出n
for i in num: #遍历num
now_time = num.count(i) #得到当前遍历项的出现次数
if now_time > n/2: #如果该数字出现次数大于n/2
res.append(i) #则加入结果
由于循环中,会把每一个众数都加到结果中得到如下结果
[5, 5, 5, 5]
所以在加一部去重复数据
return set(res)
结果:

Lv2:简化
上述方案中,力求快速实现需求.在细节上比较冗余,这里在进行一步简化.
def func(num:list): #定义一个函数,接收"列表"数据
# res = [] #实际上由于众数的规则(数量>一般),一个数组中只可能有一个.所以遇到直接返回就好了
# n = len(num) #把这步计算直接放到if条件中
for i in num: #遍历num
# now_time = num.count(i) #可以将这个计算直接放到条件上
if num.count(i) > len(num)/2: #可以将n/2的计算,直接放到这
return i #则加入结果
效果如下:

LV3效率优化
从功能的角度来说,上述方案是可行的.但是一旦遇到海量数据,重复计算list.count()非常耗时.如图:
这个测试数据中有5w+个元素,计算非常巨大

重新思考题目中的众数,发现几个特性:
①一个数组中最多只有1个众数(不会出现2个过半数的元素)
②如果数组是从大到小排列(list.sort()函数可以进行排序),那么中间的那个数字一定是众数
③对于数组而言,也分奇数/偶数元素
如果是奇数
数组的元素数量是奇数
l = [1,1,3,3,3]
print(len(l) // 2)可以使用"整除"得到中点
这时恰好取到数组的中点,那么取到的一定是众数
如果是偶数
数组的元素数是偶数
l = [1,1,3,3,3,3]
print(len(l) // 2)
取到的是绝对中点向后取整,此案例使4/7
此时的众数也一定是>7/2,即至少出现4次
所以l[len(2//l)]一定是众数
重写:
数组的元素数是偶数
def majorityElement(nums):
nums.sort()
return nums[len(nums) // 2]
效果如图:

结论:速度比起直接解法,快了20倍以上
边栏推荐
- 浏览器渲染页面过程
- 关于联邦学习和激励的相关概念(1)
- Selected review | machine learning technology for Cataract Classification / classification
- Reinforcement learning - learning notes 2 | value learning
- 【ISMB2022教程】图表示学习的精准医疗,哈佛大学Marinka Zitnik主讲,附87页ppt
- Every time I look at the interface documents of my colleagues, I get confused and have a lot of problems...
- acwing 3302. 表达式求值
- LeetCode 871. 最低加油次数
- [Beijing Xunwei] i.mx6ull development board porting Debian file system
- 2022 version of stronger jsonpath compatibility and performance test (snack3, fastjson2, jayway.jsonpath)
猜你喜欢

What if the WiFi of win11 system always drops? Solution of WiFi total drop in win11 system

九齐NY8B062D MCU规格书/datasheet

Win11亮度被锁定怎么办?Win11亮度被锁定的解决方法

What if win11u disk refuses access? An effective solution to win11u disk access denial

ICML 2022 | Meta提出鲁棒的多目标贝叶斯优化方法,有效应对输入噪声

Managed service network: application architecture evolution in the cloud native Era

《动手学深度学习》(三) -- 卷积神经网络 CNN

Jiuqi ny8b062d MCU specification /datasheet

工厂从自动化到数字孪生,图扑能干什么?

【ISMB2022教程】图表示学习的精准医疗,哈佛大学Marinka Zitnik主讲,附87页ppt
随机推荐
What is involution?
Idea case shortcut
MySQL中的日期时间类型与格式化方式
MySQL statement execution details
Is it necessary to apply for code signing certificate for software client digital signature?
Flet教程之 08 AppBar工具栏基础入门(教程含源码)
同事的接口文档我每次看着就头大,毛病多多。。。
【深度学习】一文看尽Pytorch之十九种损失函数
GVM使用
一文搞懂Go语言中文件的读写与创建
Ziguang zhanrui completed the first 5g R17 IOT NTN satellite on the Internet of things in the world
剑指 Offer II 80-100(持续更新)
Record the online bug solving list (unfinished to be continued 7/4)
伦敦银走势图分析的新方法
How does win11 search for wireless displays? Win11 method of finding wireless display device
15million employees are easy to manage, and the cloud native database gaussdb makes HR office more efficient
Qt编写物联网管理平台38-多种数据库支持
Flet教程之 07 PopupMenuButton基础入门(教程含源码)
Qt五子棋人机对战画棋子之QPainter的使用误区总结
Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法