news 2026/6/10 19:46:32

华为OD机考真题 - 查找众数及中位数 (C++ Python JAVA JS GO)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD机考真题 - 查找众数及中位数 (C++ Python JAVA JS GO)

查找众数及中位数

2025华为OD机试 - 华为OD上机考试 100分题型

华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解

题目描述

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

中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数。

查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数。

输入描述

输入一个一维整型数组,数组大小取值范围 0<N<1000,数组中每个元素取值范围 0<E<1000

输出描述

输出众数组成的新数组的中位数

用例1

输入

10 11 21 19 21 17 21 16 21 18 15

输出

21

用例2

输入

2 1 5 4 3 3 9 2 7 4 6 2 15 4 2 4

输出

3

用例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

题解

思路:模拟

  1. 使用哈希表统计各个数字出现的次数。并记录出现最多次数。
  2. 循环哈希表将出现次数扽古最多次数的数字放置到数组中,构成众数数组。
  3. 将众数数组进行排序,然后根据数组长度为奇数或偶数情况输出中位数即可。

c++

#include<iostream> #include<vector> #include<string> #include <utility> #include <sstream> #include<algorithm> #include<cmath> #include<map> using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vector<int> split(const string& str, const string& delimiter) { vector<int> result; size_t start = 0; size_t end = str.find(delimiter); while (end != string::npos) { result.push_back(stoi(str.substr(start, end - start))); start = end + delimiter.length(); end = str.find(delimiter, start); } // 添加最后一个部分 result.push_back(stoi(str.substr(start))); return result; } int main() { string input; getline(cin, input); vector<int> nums = split(input, " "); // 存储每个数字出现的次数 map<int,int> numCount; int maxCount = 0; for (auto& num : nums) { numCount[num]++; maxCount = max(maxCount, numCount[num]); } // 存储众数 vector<int> tmp; for (auto& p : numCount) { if (p.second == maxCount) { tmp.push_back(p.first); } } // 众数数组排序 sort(tmp.begin(), tmp.end()); // 中位数处理 int mid = tmp.size() / 2; // 偶数情况 if (tmp.size() % 2) { cout << (tmp[mid] + tmp[mid -1]) / 2; } else { cout << tmp[mid]; } return 0; }

JAVA

import java.io.*; import java.util.*; /** * 统计众数并求众数数组的中位数 */ public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); String[] parts = input.trim().split("\\s+"); // 统计每个数字出现的次数 Map<Integer, Integer> numCount = new HashMap<>(); int maxCount = 0; for (String s : parts) { int num = Integer.parseInt(s); numCount.put(num, numCount.getOrDefault(num, 0) + 1); maxCount = Math.max(maxCount, numCount.get(num)); } // 存储所有众数 List<Integer> tmp = new ArrayList<>(); for (Map.Entry<Integer, Integer> e : numCount.entrySet()) { if (e.getValue() == maxCount) { tmp.add(e.getKey()); } } // 众数数组排序 Collections.sort(tmp); // 中位数处理 int mid = tmp.size() / 2; if (tmp.size() % 2 == 0) { System.out.println((tmp.get(mid) + tmp.get(mid - 1)) / 2); } else { System.out.println(tmp.get(mid)); } } }

Python

importsysfromcollectionsimportdefaultdictdefmain():line=sys.stdin.readline().strip()nums=list(map(int,line.split()))# 统计每个数字出现的次数num_count=defaultdict(int)max_count=0fornuminnums:num_count[num]+=1max_count=max(max_count,num_count[num])# 存储所有众数tmp=[kfork,vinnum_count.items()ifv==max_count]# 众数数组排序tmp.sort()# 中位数处理mid=len(tmp)//2iflen(tmp)%2==0:print((tmp[mid]+tmp[mid-1])//2)else:print(tmp[mid])if__name__=="__main__":main()

JavaScript

'use strict';constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});letinput='';rl.on('line',line=>{input+=line.trim();});rl.on('close',()=>{constnums=input.split(/\s+/).map(Number);// 统计每个数字出现的次数constnumCount=newMap();letmaxCount=0;for(constnumofnums){constcnt=(numCount.get(num)||0)+1;numCount.set(num,cnt);maxCount=Math.max(maxCount,cnt);}// 存储所有众数consttmp=[];for(const[k,v]ofnumCount.entries()){if(v===maxCount){tmp.push(k);}}// 众数数组排序tmp.sort((a,b)=>a-b);// 中位数处理constmid=Math.floor(tmp.length/2);if(tmp.length%2===0){console.log(Math.floor((tmp[mid]+tmp[mid-1])/2));}else{console.log(tmp[mid]);}});

Go

packagemainimport("bufio""fmt""os""sort""strconv""strings")funcmain(){in:=bufio.NewReader(os.Stdin)line,_:=in.ReadString('\n')line=strings.TrimSpace(line)parts:=strings.Fields(line)// 统计每个数字出现的次数numCount:=make(map[int]int)maxCount:=0for_,s:=rangeparts{num,_:=strconv.Atoi(s)numCount[num]++ifnumCount[num]>maxCount{maxCount=numCount[num]}}// 存储所有众数tmp:=make([]int,0)fork,v:=rangenumCount{ifv==maxCount{tmp=append(tmp,k)}}// 众数数组排序sort.Ints(tmp)// 中位数处理mid:=len(tmp)/2iflen(tmp)%2==0{fmt.Println((tmp[mid]+tmp[mid-1])/2)}else{fmt.Println(tmp[mid])}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:52:59

如何在子类中修改类变量?

在子类中修改类变量的核心逻辑是&#xff1a;区分 “修改父类的类变量” 和 “重写 / 修改子类自己的类变量” —— 子类可以独立维护自己的类变量&#xff0c;也能主动修改父类的类变量&#xff0c;两种场景的写法和效果完全不同&#xff0c;下面分场景讲透具体操作、避坑点和…

作者头像 李华
网站建设 2026/6/10 12:56:01

BetterNCM插件终极指南:一键解锁网易云音乐隐藏功能

BetterNCM插件终极指南&#xff1a;一键解锁网易云音乐隐藏功能 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在使用基础版的网易云音乐吗&#xff1f;BetterNCM插件将彻底改变你的…

作者头像 李华
网站建设 2026/6/10 12:56:21

培训咨询微信小程序毕业设计源码(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌ 专注于VUE,小程序&#xff0c;安卓&#xff0c;Java,python,物联网专业&#xff0c;有18年开发经验&#xff0c;长年从事毕业指导&#xff0c;项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、…

作者头像 李华
网站建设 2026/6/10 2:53:34

基于LobeChat的智能客服系统设计与实现路径

基于LobeChat的智能客服系统设计与实现路径 在企业数字化转型加速的今天&#xff0c;客户对服务响应速度和专业性的要求越来越高。一个用户凌晨两点提交的产品使用问题&#xff0c;如果等到第二天才被处理&#xff0c;很可能就已经流失了。传统人工客服受限于人力成本和工作时间…

作者头像 李华
网站建设 2026/6/10 15:07:30

零刻预告全球最小双盘位NAS:Intel、AMD、Arm随便选

现在&#xff0c;零刻预告了新款NAS ME Pro&#xff0c;号称世界上最小的双盘位NAS&#xff0c;长宽尺寸只有166mm、121mm&#xff0c;高度仅为122mm&#xff0c;同时也提供四盘位版本。 一体化机身设计&#xff0c;不需要挡板或外部支架&#xff0c;从而释放更多内部空间&…

作者头像 李华