题目描述:
信号传播过程中会出现一些误码,不同的数字表示不同的误码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
#华为机试,emo了#
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)