当前位置:网站首页>测试员的算法面试题-找众数
测试员的算法面试题-找众数
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倍以上
边栏推荐
- Jekins initialization password not found or not found
- Summary of the mistakes in the use of qpainter in QT gobang man-machine game
- Aiming at the "amnesia" of deep learning, scientists proposed that based on similarity weighted interleaved learning, they can board PNAS
- 【ISMB2022教程】图表示学习的精准医疗,哈佛大学Marinka Zitnik主讲,附87页ppt
- NetCore3.1 Json web token 中间件
- Stack: how to realize the judgment of valid brackets?
- Record the online bug solving list (unfinished to be continued 7/4)
- JS closure
- So this is the BGP agreement
- go笔记(1)go语言介绍以及特点
猜你喜欢
随机推荐
Ziguang zhanrui completed the first 5g R17 IOT NTN satellite on the Internet of things in the world
Hash quiz game system development how to develop hash quiz game system development (multiple cases)
Alibaba testers use UI automated testing to achieve element positioning
Selected review | machine learning technology for Cataract Classification / classification
What if the brightness of win11 is locked? Solution to win11 brightness locking
电脑共享打印机拒绝访问要怎么办
关于联邦学习和激励的相关概念(1)
NLP、视觉、芯片...AI重点方向发展几何?青源会展望报告发布[附下载]
go语言笔记(4)go常用管理命令
Form组件常用校验规则-1(持续更新中~)
Four traversal methods of binary tree, as well as the creation of binary tree from middle order to post order, pre order to middle order, pre order to post order, and sequence [specially created for t
栈:如何实现有效括号的判断?
idea配置标准注释
FS8B711S14电动红酒开瓶器单片机IC方案开发专用集成IC
Integritee通过XCM集成至Moonriver,为其生态系统带来企业级隐私解决方案
记录线上bug解决list(未完待续7/4)
mysql语句执行详解
How to adapt your games to different sizes of mobile screen
易周金融 | Q1保险行业活跃人数8688.67万人 19家支付机构牌照被注销
电脑页面不能全屏怎么办?Win11页面不能全屏的解决方法