题目描述
信号传播过程中会出现一些误码,不同的数字表示不同的误码ID,取值范围为1~65535,用一个数组记录误码出现的情况,
每个误码出现的次数代表误码频度,请找出记录中包含频度最高误码的最小子数组长度。
输入描述
误码总数目:取值范围为0~255,取值为0表示没有误码的情况。
误码出现频率数组:误码ID范围为165535,数组长度为11000。
输出描述
包含频率最高的误码最小子数组长度
用例
示例1:
输入:
5
1 2 2 4 1
输出:
2
说明:
频度最高的有1和2,他们的频度均为2.可能的记录数组为[2,2]和 [1,2,2,4,1],最短的长度为2.
示例2:
输入:
7
1 2 2 4 2 1 1
输出:
4
说明:
最短的为[2,2,4,2]
个人解法
不保证通过率
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int count = Integer.parseInt(s);
int[] nums = new int[count];
String[] split = br.readLine().split(" ");
HashMap<Integer,Integer> map = new HashMap<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
int anInt = Integer.parseInt(split[i]);
nums[i] = anInt;
sb.append(anInt);
map.put(anInt,map.getOrDefault(anInt,0)+1);
}
ArrayList<Map.Entry<Integer,Integer>> list = new ArrayList<>(map.entrySet());
list.sort((o1, o2) -> o2.getValue()-o1.getValue());
int max = list.get(0).getValue();
String string= sb.toString();
int min = count;
for (Map.Entry<Integer, Integer> entry : list) {
if (entry.getValue()<max)break;
String t = entry.getKey().toString();
min=Math.min(min,string.lastIndexOf(t)-string.indexOf(t)+1);
}
System.out.println(min);
}
}