news 2026/3/7 16:43:59

华为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/3/6 6:55:14

uvm_sequence机制中重要task的拆解

详细拆解start()任务start()任务不是在uvm_sequence中声明的&#xff0c;而是在uvm_sequence_base中声明的&#xff0c;所以uvm_sequence继承了uvm_sequence_base中的start()方法virtual task start (uvm_sequencer_base sequencer, // 目标sequencer &#xff08;必须…

作者头像 李华
网站建设 2026/3/3 17:34:15

LobeChat在线帮助文档编写规范:让新人快速上手

LobeChat在线帮助文档编写规范&#xff1a;让新人快速上手 在AI技术飞速渗透日常工作的今天&#xff0c;越来越多团队开始尝试引入大语言模型提升效率。但现实往往并不理想&#xff1a;非技术人员面对API密钥、curl命令和Python脚本时一脸茫然&#xff1b;开发人员则疲于搭建前…

作者头像 李华
网站建设 2026/3/5 13:23:59

LobeChat量化模型支持情况:INT4、INT8推理表现对比

LobeChat量化模型支持情况&#xff1a;INT4、INT8推理表现对比 在如今大语言模型&#xff08;LLM&#xff09;快速普及的背景下&#xff0c;越来越多用户希望在本地设备上运行属于自己的AI助手。然而&#xff0c;一个7B或13B参数规模的FP16模型动辄需要10GB以上的内存资源&…

作者头像 李华
网站建设 2026/3/3 7:25:02

类变量和全局变量的作用域分别是什么?

类变量和全局变量的作用域核心差异在于可见范围的边界&#xff1a;全局变量的作用域是「整个模块」&#xff0c;类变量的作用域是「类的命名空间」&#xff08;及子类 / 实例&#xff09;。下面从定义、访问规则、边界限制、示例验证四个维度拆解&#xff0c;让作用域的边界更清…

作者头像 李华
网站建设 2026/3/3 14:34:52

LobeChat日志聚合分析方案

LobeChat 日志聚合分析方案 在AI聊天应用日益深入企业与个人工作流的今天&#xff0c;一个看似不起眼却至关重要的问题逐渐浮出水面&#xff1a;我们真的了解用户是如何使用这些智能对话系统的吗&#xff1f; 以开源项目 LobeChat 为例&#xff0c;它凭借对多模型支持、插件扩展…

作者头像 李华
网站建设 2026/2/27 1:38:21

Java全栈开发面试实战:从基础到高阶的深度对话

Java全栈开发面试实战&#xff1a;从基础到高阶的深度对话 一、面试开场 面试官&#xff1a;你好&#xff0c;欢迎来到我们公司的面试。我是今天的面试官&#xff0c;主要负责技术评估。今天我们会围绕你的项目经验、技术能力以及对业务的理解展开讨论。你可以先简单介绍一下自…

作者头像 李华