考试平台: 时习知
分值: 100分(第一题)
考试时间: 2024-01-31 (两小时)
题目描述
民警侦办某商场店面盗窃案时,通过人脸识别针对嫌疑人进行编号1-100000。
现在民警在监控记录中发现某个嫌疑人在被窃店面出现的次数超过了所有嫌疑人总出现次数的一半,请帮助民警尽可能高效的找到该嫌疑人的编号。
输入
给定一个嫌疑人的标号数组men,其中 1<length(men)< 1000,嫌疑人编号满足1<= men <= 100000
输出
返回出现次数超过一半的嫌疑人的编号。
如果总次数是偶数,例如4,则需要超过2次即最少3次,如果总次数是奇数,例如5,则需要超过2.5,满足条件最少是3次。
若没有嫌疑人满足该条件,返回0
示例1
输入:
1,2,3,2,2
输出:
2
解释:
第一行是嫌疑人出现记录,代表1号和3号嫌疑人出现1次,2号嫌疑人出现3次,因为2号嫌疑人出现3次,超过5次的一半,因此2号嫌疑人即为需要寻找的编号,输出2
示例2
输入:
1,1,2,2,3,3
输出:
0
解释:
第一行是嫌疑人出现记录,代表1号、2号和3号嫌疑人各出现2次因为各个嫌疑人均只出现2次,未超过6次的一半,因此没有嫌疑人满足要求,输出0
Python 题解
解题思路
使用字典(或哈希表)统计每个嫌疑人的出现次数,同时判断出现次数,如果出现次数超过一半,则直接返回该嫌疑人的编号,否则继续遍历。
代码描述
- 将输入的嫌疑人编号数组转换为列表
arr
。- 初始化一个空字典
cnt
用于统计每个嫌疑人的出现次数。- 计算超过一半的次数阈值
half
。- 遍历嫌疑人编号数组,更新字典
cnt
,并判断当前嫌疑人的出现次数是否超过一半。- 如果超过一半,直接返回该嫌疑人的编号。
- 如果遍历完都没有找到,返回0。
Python 题解
arr = list(map(int, input().split(",")))
n = len(arr)
# 次数统计
cnt = {}
half, rs = n // 2 + 1, 0
for t in arr:
cnt[t] = cnt.get(t, 0) + 1
if cnt[t] >= half: # 找到出现次数超过一半的嫌疑人的编号
rs = t
break
print(rs)
🙏整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏