通信误码
题目描述
信号传播过程中会出现一些误码,不同的数字表示不同的误码ID,取值范围为1~65535,用一个数组记录误码出现的情况,每个误码出现的次数代表误码频度,请找出记录中包含频度最高误码的最小子数组长度。
输入描述
误码总数目:取值范围为0~255,取值为0表示没有误码的情况。
误码出现频率数组:误码ID范围为1~65535,数组长度为1~1000。
输出描述
包含频率最高的误码最小子数组长度
示例一
输入
5 1 2 2 4 1
输出
2
说明
频度最高的有1和2,频度是2(出现的次数都是2)。
可以包含频度最高的记录数组是[2 2]和[1 2 2 4 1],
最短是[2 2],最小长度为2
示例二
输入
7 1 2 2 4 2 1 1
输出
4
Copy
说明
频度最高的是1和2,最短的是[2 2 4 2]
Java
import java.util.*;
public class Main{
public static void main(String[] args) {
try (Scanner in = new Scanner(System.in)) {
String line = in.nextLine();
int res = solution(line);
System.out.println(res);
}
}
private static int solution(String line) {
String[] split = line.split(" ");
int[] ints = new int[split.length];
Set<Integer> maxCode = new HashSet<>();
HashMap<Integer, Integer> codeCountMap = new HashMap<>();
int maxCount = 0;
for (int i = 0; i < split.length; i++) {
int tmp = Integer.parseInt(split[i]);
ints[i] = tmp;
int count = codeCountMap.getOrDefault(tmp, 0)+1;
maxCount = Math.max(count, maxCount);
codeCountMap.put(tmp, count);
}
for (Map.Entry<Integer, Integer> entry : codeCountMap.entrySet()) {
if (entry.getValue() == maxCount) {
maxCode.add(entry.getKey());
}
}
int res = Integer.MAX_VALUE;
for (Integer code : maxCode) {
int li = 0, hi = ints.length - 1;
while (ints[li] != code) {
li++;
}
while (ints[hi] != code) {
hi--;
}
if (li <= hi) {
res = Math.min(hi - li + 1, res);
}
}
return res;
}
}
这篇博客探讨了通信误码问题,特别是在华为OD场景下。文章通过具体例子介绍了如何找出频度最高的误码及其最小子数组长度。利用输入描述、输出描述以及示例解释了问题的解决思路,涉及数据处理和算法应用。
1276

被折叠的 条评论
为什么被折叠?



