查找众数及中位数
题目描述:查找众数及中位数
众数是指一组数据中出现次数量多的那个数,众数可以是多个。
中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数。
查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数。
输入描述
输入一个一维整型数组,数组大小取值范围 0<N<1000,数组中每个元素取值范围 0<E<1000
输出描述
输出众数组成的新数组的中位数
用例
输入 10 11 21 19 21 17 21 16 21 18 15
输出 21
输入 2 1 5 4 3 3 9 2 7 4 6 2 15 4 2 4
输出 3
输入 5 1 5 3 5 2 5 5 7 6 7 3 7 11 7 55 7 9 98 9 17 9 15 9 9 1 39
输出 7
题目解析
题目要求找到整型数组中的众数,可以使用哈希表来统计每个数出现的次数,然后找到出现次数最多的数,即为众数。如果有多个众数,都放入一个新数组中。接着,对新数组进行排序,找到其中位数即可。
代码解析:
public static String findMode() {
int mide = 0;
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
// 空白分割
String[] arr = line.split("\s+");
Map<Integer, Integer> m = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
if ("".equals(arr[i])) {
continue;
}
Integer key = Integer.parseInt(arr[i]);
Integer count = m.get(key);
if (count == null || count == 0) {
count = 1;
} else {
count += 1;
}
m.put(key, count);
}
// 获取 m中value最大值,集合
Iterator<Map.Entry<Integer, Integer>> iterator = m.entrySet().iterator();
// 获取 count最大值
int maxValue = 0;
while (iterator.hasNext()) {
Map.Entry<Integer, Integer> next = iterator.next();
int num = next.getKey();
int count = next.getValue();
maxValue = Math.max(maxValue, count);
}
List
Iterator<Map.Entry<Integer, Integer>> iterator2 = m.entrySet().iterator();
while (iterator2.hasNext()) {
Map.Entry<Integer, Integer> next = iterator2.next();
int num = next.getKey();
int count = next.getValue();
if (count == maxValue) {
a.add(num);
}
}
Collections.sort(a);
int size = a.size();
// 偶数,中间数相加 除以 2
if (size == 1) {
mide = a.get(0);
} else if (size % 2 == 0) {
mide = (a.get(size / 2 - 1) + a.get(size / 2)) / 2;
} else {
mide = a.get(size / 2);
}
return "" + mide;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~