2026/1/10 12:22:31
网站建设
项目流程
微网站和网站同步像素,网站推广维护,有域名怎么建网站,杭州建筑网页设计查找众数及中位数 2025华为OD机试 - 华为OD上机考试 100分题型 华为OD机试真题目录点击查看: 华为OD机试真题题库目录#xff5c;机考题库 算法考点详解
题目描述
众数是指一组数据中出现次数量多的那个数#xff0c;众数可以是多个。
中位数是指把一组数据从小到大排列…查找众数及中位数2025华为OD机试 - 华为OD上机考试 100分题型华为OD机试真题目录点击查看: 华为OD机试真题题库目录机考题库 算法考点详解题目描述众数是指一组数据中出现次数量多的那个数众数可以是多个。中位数是指把一组数据从小到大排列最中间的那个数如果这组数据的个数是奇数那最中间那个就是中位数如果这组数据的个数为偶数那就把中间的两个数之和除以2所得的结果就是中位数。查找整型数组中元素的众数并组成一个新的数组求新数组的中位数。输入描述输入一个一维整型数组数组大小取值范围 0N1000数组中每个元素取值范围 0E1000输出描述输出众数组成的新数组的中位数用例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题解思路:模拟使用哈希表统计各个数字出现的次数。并记录出现最多次数。循环哈希表将出现次数扽古最多次数的数字放置到数组中构成众数数组。将众数数组进行排序然后根据数组长度为奇数或偶数情况输出中位数即可。c#includeiostream #includevector #includestring #include utility #include sstream #includealgorithm #includecmath #includemap using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vectorint split(const string str, const string delimiter) { vectorint 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); vectorint nums split(input, ); // 存储每个数字出现的次数 mapint,int numCount; int maxCount 0; for (auto num : nums) { numCount[num]; maxCount max(maxCount, numCount[num]); } // 存储众数 vectorint 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; }JAVAimport 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); // 统计每个数字出现的次数 MapInteger, 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)); } // 存储所有众数 ListInteger tmp new ArrayList(); for (Map.EntryInteger, 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)); } } }Pythonimportsysfromcollectionsimportdefaultdictdefmain():linesys.stdin.readline().strip()numslist(map(int,line.split()))# 统计每个数字出现的次数num_countdefaultdict(int)max_count0fornuminnums:num_count[num]1max_countmax(max_count,num_count[num])# 存储所有众数tmp[kfork,vinnum_count.items()ifvmax_count]# 众数数组排序tmp.sort()# 中位数处理midlen(tmp)//2iflen(tmp)%20:print((tmp[mid]tmp[mid-1])//2)else:print(tmp[mid])if__name____main__:main()JavaScriptuse strict;constreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letinput;rl.on(line,line{inputline.trim();});rl.on(close,(){constnumsinput.split(/\s/).map(Number);// 统计每个数字出现的次数constnumCountnewMap();letmaxCount0;for(constnumofnums){constcnt(numCount.get(num)||0)1;numCount.set(num,cnt);maxCountMath.max(maxCount,cnt);}// 存储所有众数consttmp[];for(const[k,v]ofnumCount.entries()){if(vmaxCount){tmp.push(k);}}// 众数数组排序tmp.sort((a,b)a-b);// 中位数处理constmidMath.floor(tmp.length/2);if(tmp.length%20){console.log(Math.floor((tmp[mid]tmp[mid-1])/2));}else{console.log(tmp[mid]);}});Gopackagemainimport(bufiofmtossortstrconvstrings)funcmain(){in:bufio.NewReader(os.Stdin)line,_:in.ReadString(\n)linestrings.TrimSpace(line)parts:strings.Fields(line)// 统计每个数字出现的次数numCount:make(map[int]int)maxCount:0for_,s:rangeparts{num,_:strconv.Atoi(s)numCount[num]ifnumCount[num]maxCount{maxCountnumCount[num]}}// 存储所有众数tmp:make([]int,0)fork,v:rangenumCount{ifvmaxCount{tmpappend(tmp,k)}}// 众数数组排序sort.Ints(tmp)// 中位数处理mid:len(tmp)/2iflen(tmp)%20{fmt.Println((tmp[mid]tmp[mid-1])/2)}else{fmt.Println(tmp[mid])}}