当前位置: 首页 > 面试经验 >

【华为OD机试2023】通信误码(Python)

优质
小牛编辑
121浏览
2023-03-28

【华为OD机试2023】通信误码(Python)

题目描述:

信号传播过程中会出现一些误码,不同的数字表示不同的误码ID,取值范围为1~65535,用一个数组记录误码出现的情况。每个误码出现的次数代表误码频度,请找出记录中包含频度最高误码的最小子数组长度。

输入描述:

误码总数目:取值范围为0~255,取值为0表示没有误码的情况。

误码出现频率数组:误码ID范围为1~65535,数组长度为1~1000。

输出描述:

包含频率最高的误码最小子数组长度

示例1

输入:

5

1 2 2 4 1

输出:

2

说明:

频度最高的有1和2,频度是2(出现的次数都是2)。可以包含频度最高的记录数组是[2 2]和[1 2 2 4 1],最短是[2 2],最小长度为2

示例2

输入:

7

1 2 2 4 2 1 1

输出:

4

说明:

频度最高的是1和2。最短的是:[2 2 4 2]

解题思路:

运用set()求出所有乱码,然后就是一个两层循环,没什么难度

注:示例没给出如果只有一个误码,且该误码为0(即不是误码)的情况该怎么处理,所以就没写。其他情况,输出至少也是1


n=int(input())
st=input().split()
#去重求出所有的乱码
wuma=list(set(st))
#记录频数最高的乱码的频数
max_pinshu=0
#记录频数最高的乱码
s=[]
for word in wuma:
if st.count(word)>max_pinshu:
#如果发现一个乱码的频数比之前的都高,先把列表清空,再添加
s.clear()
s.append(word)
max_pinshu=st.count(word)
elif st.count(word)==max_pinshu:
s.append(word)
min_l=1000
#两层循环遍历子串
for i in range(n):
for j in range(i+1,n+1):
for value in s:
if st[i:j].count(value)==max_pinshu and (j-i)<min_l:
min_l=j-i
print(min_l)

#华为机试,emo了#
 类似资料: