当前位置: 首页 > news >正文

华为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])}}
http://www.jsqmd.com/news/102447/

相关文章:

  • 打工人日报#20251216
  • 如何通过EmotiVoice生成悲伤、愤怒、喜悦等情绪语音?
  • LobeChat暗黑模式开启方法:保护眼睛的视觉体验
  • 构建多角色对话系统:利用EmotiVoice区分人物音色
  • DeepSeek-Math数学推理引擎实战指南:让AI成为你的数学助手
  • 延续Windows Android生态:WSABuilds架构解析与实践
  • 行式存储:大数据领域的高效解决方案
  • 2025终极指南:快速上手FGO自动战斗工具FGA
  • CrystalDiskInfo:免费硬盘健康监测工具的终极指南
  • net experiment
  • acl experiment
  • LobeChat弹窗提示语设计
  • 如何快速掌握diff-pdf:PDF文档对比的完整指南
  • MeshLab文件格式处理终极指南:解决3D模型兼容性与工作流优化
  • 终极指南:Aurora Admin Panel如何让多服务器管理变得如此简单
  • RAG性能优化指南:从冷启动到响应加速
  • 算法 C语言 冒泡排序
  • uvm_sequence机制中重要task的拆解
  • BetterNCM终极指南:打造个性化网易云音乐播放体验
  • LobeChat向上销售话术生成
  • Chrome搜索替换插件:终极免费的网页文本批量处理神器
  • 3步搞定小爱音箱音乐播放自由:XiaoMusic开源工具终极指南
  • LobeChat灾备恢复进度通报
  • PuzzleSolver:CTF MISC解题利器全面解析与实战指南
  • LobeChat优惠券系统设计:促销活动如何吸引用户?
  • 基于微信小程序的一次性环保餐具销售系统毕业设计源码(源码+lw+部署文档+讲解等)
  • 基于微信小程序的会议发布与预约系统的设计与开发计算机毕业设计(源码+lw+部署文档+讲解等)
  • SpringBoot+Vue 工作量统计系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • OBS Studio直播质量优化:5大维度打造专业级推流体验
  • 基于SpringBoot+Vue的公司资产网站管理系统设计与实现【Java+MySQL+MyBatis完整源码】