华为OD机试之查找众数及中位数(Java源码)

news/2025/2/1 17:41:43/

查找众数及中位数

题目描述

众数是指一组数据中出现次数量多的那个数,众数可以是多个。

中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以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

题目解析

这个题属于逻辑题,先将输入的字符串解析成数组,然后转换到map中去,顺便把出现最多的次数记录下来。

遍历map将次数等于最多次数的数装入一个List

对List进行排序,排序后根据列表长度来确认中位数

示例代码Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;/*** 求众数排列后的中位数 1.求众数 2.求中位数 10 11 21 19 21 17 21 16 21 18 15 2 1 5 4 3 3 9 2 7 4* 6 2 15 4 2 4 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*/
public class T50 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Map<Integer, Integer> map = new HashMap<Integer, Integer>();int max[] = new int[1];Arrays.stream(sc.nextLine().split(" ")).forEach(s -> {int key = Integer.parseInt(s);map.put(key, map.containsKey(key) ? map.get(key) + 1 : 1);if (max[0] < map.get(key)) {max[0] = map.get(key).intValue();// 求出出现的最大次数}});System.out.println(map);// 过滤Set<Integer> keySet = map.keySet();List<Integer> numList = new ArrayList<Integer>();Iterator<Integer> it = keySet.iterator();while (it.hasNext()) {Integer key = it.next();if (map.get(key) == max[0]) {for (int i = 0; i < map.get(key); i++) {numList.add(key);}}}System.out.println(numList);// 求中位数numList.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer arg0, Integer arg1) {if (arg0 < arg1)return -1;if (arg0 > arg1)return 1;return 0;}});int middle = numList.size() % 2 == 1 ? numList.get(numList.size() / 2): (numList.get(numList.size() / 2) + numList.get(numList.size() / 2 - 1)) / 2;System.out.println(middle);}
}

代码运行示意图
在这里插入图片描述


http://www.ppmy.cn/news/361541.html

相关文章

Thinkx200 XP安装资料整理

[http://erfan1016.blog.163.com/blog/static/5435013220097159383997/] 第1步&#xff1a;制作U盘启动的WinPE&#xff1a; 用WinPE (老毛桃最终修改版) V09.11在U盘上安装WinPE系统&#xff0c;用做启动引导盘&#xff0c;过程如下(图片来自网络)&#xff1a; 把老毛桃Win…

硬件学习 软件 Cadence day10 查看网表导入进度,钻孔保护等一些操作

1. 查看网表导入状态。 2. 放置元器件 之前 画板框 3.放置元器件 4.把导入的DXF 文件变成板框 1.首先导入DXF文件 2. 点击按钮 3. 鼠标点击需要 调整为板框的地方 3.1 其中包括边框 3.2 固定的钻孔 5.给钻孔打上保护&#xff08;防止布线的时候区域错误&#xff0c;在固定的时…

操作系统原理笔记

1940S的操作系统 操作系统&#xff1a;使程序能更好运行的系统软件 1940s额计算机程序是相对机械的数值计算 &#xff08;1&#xff09; 不需要也没有操作系统 &#xff08;2&#xff09; 操作系统中唯一的对象就是独占计算机运行的程序 1950s有了让多个程序共享一台计算机的需…

win10计算机搜索记录怎么删除,win10系统清除电脑里搜索记录的操作方法

很多小伙伴都遇到过对win10系统清除电脑里搜索记录进行设置的困惑吧&#xff0c;一些朋友看过网上对win10系统清除电脑里搜索记录设置的零散处理方法&#xff0c;并没有完完全全明白win10系统清除电脑里搜索记录的操作方法非常简单&#xff0c;只需要1、打开此电脑&#xff0c;…

Java - 填充Word文本域、Word转PDF操作

先看效果: 填充前: 填充后效果: 第一步: 引入Maven坐标: <!-- hutool工具类 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.6.3</version></dependency><!--word模板…

操作系统网课笔记

操作系统 网课链接 https://www.bilibili.com/video/BV1uW411f72n?fromsearch&seid7305616632390248505 内容参照这位兄弟的博客 https://blog.csdn.net/iwanderu/article/details/103934127 很细 参考的Github笔记链接 https://github.com/OXygenPanda/Deep_into_Oper…

chrome kde钱包_Chrome for iOS开源,KDE品牌笔记本电脑和更多开源新闻

chrome kde钱包 在本期开放源代码新闻摘要中&#xff0c;我们将介绍Google的iOS开源Chrome浏览器&#xff0c;Slimbook的KDE品牌笔记本电脑等等&#xff01; 2017年1月22日至2月4日的开源新闻摘要 Google将Chrome for iOS代码开源 Chromium博客宣布 &#xff0c;经过多年的重…

清华操作系统笔记

第一章 第一章的主要内容是 : 操作系统的一些知识 操作系统是什么&#xff1f; 用户角度&#xff1a;操作系统是一个控制软件 管理应用程序为应用程序提供服务杀死应用程序 程序角度&#xff1a;操作系统是资源管理器 管理外设、分配资源抽象 将CPU抽象成进程将磁盘抽象成文…