news 2026/5/11 17:27:41

华为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/5/10 14:28:39

用EmotiVoice打造个性化语音助手,只需几秒音频样本

用EmotiVoice打造个性化语音助手&#xff0c;只需几秒音频样本 在智能设备无处不在的今天&#xff0c;语音助手早已不是新鲜事物。但你是否曾觉得&#xff0c;无论是Siri、小爱同学还是天猫精灵&#xff0c;它们的声音总像“别人家的孩子”——标准却陌生&#xff1f;如果能让你…

作者头像 李华
网站建设 2026/5/8 19:38:45

3步搞定小爱音箱音乐播放自由:XiaoMusic开源工具终极指南

你是否曾对小爱音箱说"播放周杰伦的青花瓷"&#xff0c;却得到"抱歉&#xff0c;这首歌暂时无法播放"的回复&#xff1f;现在&#xff0c;有了XiaoMusic开源项目&#xff0c;你的小爱音箱将获得前所未有的音乐播放能力。这个工具通过智能语音控制&#xff…

作者头像 李华
网站建设 2026/5/9 9:33:22

BetterNCM终极指南:打造个性化网易云音乐播放体验

BetterNCM终极指南&#xff1a;打造个性化网易云音乐播放体验 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM作为网易云音乐官方客户端的强大扩展管理器&#xff0c;为音乐爱…

作者头像 李华
网站建设 2026/5/11 8:50:30

LobeChat通知系统设计:新消息提醒的多种实现方式

LobeChat通知系统设计&#xff1a;新消息提醒的多种实现方式 在构建现代AI对话应用时&#xff0c;用户是否“感知到响应正在进行”&#xff0c;往往比响应本身的速度更影响体验。试想这样一个场景&#xff1a;你向AI提问后&#xff0c;界面静止三秒毫无反馈&#xff0c;即便最终…

作者头像 李华