当前位置:网站首页>测试员的算法面试题-找众数
测试员的算法面试题-找众数
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倍以上
边栏推荐
- What should I do if my computer sharing printer refuses access
- word中插入图片后,图片上方有一空行,且删除后布局变乱
- 面对同样复杂的测试任务为什么大老很快能梳理解决方案,阿里十年测试工程师道出其中的技巧
- What if win11u disk refuses access? An effective solution to win11u disk access denial
- word中插入圖片後,圖片上方有一空行,且删除後布局變亂
- MySQL statement execution details
- go语言笔记(4)go常用管理命令
- [in-depth learning] review pytoch's 19 loss functions
- 同事的接口文档我每次看着就头大,毛病多多。。。
- 精选综述 | 用于白内障分级/分类的机器学习技术
猜你喜欢
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
实践示例理解js强缓存协商缓存
idea恢复默认快捷键
Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法
Qt五子棋人机对战画棋子之QPainter的使用误区总结
Ziguang zhanrui completed the first 5g R17 IOT NTN satellite on the Internet of things in the world
看腾讯大老如何做接口自动化测试
Aiming at the "amnesia" of deep learning, scientists proposed that based on similarity weighted interleaved learning, they can board PNAS
Idea configuration standard notes
Fleet tutorial 08 introduction to AppBar toolbar Basics (tutorial includes source code)
随机推荐
Practice examples to understand JS strong cache negotiation cache
电脑页面不能全屏怎么办?Win11页面不能全屏的解决方法
word中插入圖片後,圖片上方有一空行,且删除後布局變亂
acwing 3302. 表达式求值
Cdga | six principles that data governance has to adhere to
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
What if the computer page cannot be full screen? The solution of win11 page cannot be full screen
Dynamic memory management
mysql语句执行详解
Stack: how to realize the judgment of valid brackets?
Jekins initialization password not found or not found
Play the music of youth
PermissionError: [Errno 13] Permission denied: ‘data.csv‘
【ISMB2022教程】图表示学习的精准医疗,哈佛大学Marinka Zitnik主讲,附87页ppt
左右最值最大差问题
go语言笔记(4)go常用管理命令
Win11亮度被锁定怎么办?Win11亮度被锁定的解决方法
idea大小写快捷键
关于联邦学习和激励的相关概念(1)
From automation to digital twins, what can Tupo do?