查找众数及中位数 - 华为OD统一考试(C卷)

news2025/1/20 6:00:56

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

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

中位数只是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以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  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. 使用哈希表(HashMap、unordered_map)来统计每个元素的出现次数,并记录出现次数最多的次数(maxCnt)。
  2. 遍历数组,找出出现次数等于 maxCnt 的元素,将它们添加到众数数组中。
  3. 对众数数组进行排序,按照从小到大的顺序排列。
  4. 根据众数数组的长度,判断是奇数个众数还是偶数个众数,进而计算出新数组的中位数。

Java

import java.util.*;
/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> nums = new ArrayList<>();   // 原始数组
        Map<Integer, Integer> cnt = new HashMap<>();   // 数字计数器

        int maxCnt = 0;   // 出现最多的次数
        while (scanner.hasNextInt()) {
            int t = scanner.nextInt();
            nums.add(t);
            maxCnt = Math.max(maxCnt, cnt.merge(t, 1, Integer::sum));
        }

        List<Integer> mode = new ArrayList<>();   // 众数数组
        for (int num : nums) {
            if (cnt.get(num) == maxCnt) {
                mode.add(num);
            }
        }
        mode.sort(Comparator.comparingInt(k -> k));   // 众数排序

        // 求中位数
        int n = mode.size();
        if (n % 2 == 1) {   // 奇数个众数,取中间众数
            System.out.println(mode.get(n / 2));
        } else {   // 偶数个众数,取中间两个众数的平均值
            System.out.println((mode.get(n / 2 - 1) + mode.get(n / 2)) / 2);
        }
    }
}

Python

from collections import defaultdict

nums = list(map(int, input().split()))   # 原始数组
cnt = defaultdict(int)   # 数字计数器

max_cnt = 0   # max_cnt 出现最多的次数
for t in nums:
    cnt[t] += 1
    max_cnt = max(max_cnt, cnt[t])

mode = []   # 众数数组
for num in nums:
    if cnt[num] == max_cnt:
        mode.append(num)
mode.sort()   # 众数排序

# 求中位数
n = len(mode)
if n % 2 == 1:   # 奇数个众数,取中间众数
    print(mode[n // 2])
else:   # 偶数个众数,取中间两个众数的平均值
    print((mode[n // 2 - 1] + mode[n // 2]) // 2)

C++

#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<int>             nums;   // 原始数组
    unordered_map<int, int> cnt;    // 数字计数器

    int t, max_cnt = 0;   // max_cnt 出现最多的次数
    while (cin >> t) {
        nums.push_back(t);
        max_cnt = max(max_cnt, ++cnt[t]);
    }

    vector<int> mode;   // 众数数组
    for (int t : nums) {
        if (cnt[t] == max_cnt) {
            mode.push_back(t);
        }
    }
    sort(mode.begin(), mode.end());   // 众数排序

    // 求中位数
    int n = mode.size();
    if (n % 2 == 1) {   // 奇数个众数,取中间众数
        cout << mode[n / 2] << endl;
    } else {   // 偶数个众数,取中间两个众数的平均值
        cout << (mode[n / 2 - 1] + mode[n / 2]) / 2 << endl;
    }

    return 0;
}    

‍❤️‍有考友通过专栏已经快速通过机考,都是原题哦~~ 💪

📝 立即订阅 http://t.csdnimg.cn/lifXk

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1529775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Filter and Listener and AJAX and JSON

一、Filter Filter 表示过滤器&#xff0c;是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。&#xff08;拦截指定资源&#xff09; 正常情况下&#xff0c;浏览器可以访问服务器上的所有的资源&…

【机器学习】无监督学习算法之:高斯混合模型

高斯混合模型 1、引言2、高斯混合模型2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.4.1 概率密度函数2.4.2 EM算法之E步骤2.4.2 EM算法之M步骤 2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;给俺讲一讲什么是高斯啊 小鱼&#xff1a;高斯&#xff1f; 小…

苹果意将Gemini引入iPhone;英伟达发布新AI GPU;Grok正式开源

苹果正在谈判将 Gemini 引入 iPhone Mark Gurman 报道&#xff0c;苹果正在谈判将 Google 的生成式 AI 大模型 Gemini 引入 iPhone。 知情人士透露&#xff0c;两家公司正在积极谈判&#xff0c;让苹果获得 Gemini 授权&#xff0c;为今年 iPhone 软件的一些新功能提供动力。苹…

HCIA——30奈奎斯特定理、香农定理

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

Spring Boot 自动化单元测试类的编写过程

前言 Web环境模拟测试 企业开发不仅要保障业务层与数据层的功能安全有效&#xff0c;也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的&#xff0c;并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…

【NLP笔记】RNN总结

文章目录 经典RNN单向RNN双向RNNDeep RNNRNN特性总结 变体RNNLSTMGRU 参考及转载内容&#xff1a; 循环神经网络&#xff08;RNN&#xff09;深度学习05-RNN循环神经网络完全理解RNN&#xff08;循环神经网络&#xff09; 传统的CNN&#xff08;Covolutional Neural Network&am…

【考研数学】汤家凤《1800题》值不值得做?

属于中等偏上的水平&#xff0c;想要基础扎实把1800拿下就错不了&#xff01; 这1800道题&#xff0c;真的不是盖的&#xff0c;数量相当可观&#xff01;想搞定它们&#xff0c;可得抓紧时间&#xff0c;不然真做不完。而且&#xff0c;想要效果更佳&#xff0c;还得来个二刷…

Django分页器

Django分页器 分页器前瞻之url urls.py不需要做修改 urlpatterns [path(test/, views.test,nametest), ]假设此时在原有的路径http://127.0.0.1:8000/app01/test后面添加/?page2 然后再后端获取到page def test(request):page request.GET.get(page)print(page) # 2retu…

MATLAB环境下基于改进最大相关峭度解卷积的滚动轴承故障诊断

相关峭度解卷积MCKD是一种新的解卷积方法&#xff0c;其设计了一个新的目标函数—相关峭度&#xff0c;并以此为优化目标设计一系列的FIR滤波器&#xff0c;为实现最好的效果&#xff0c;需要从中找到最优滤波器并最终实现对信号中噪声的抑制和对信号中冲击成分的突出的目的。M…

O2OA红头文件流转与O2OA版式公文编辑器基本使用

O2OA开发平台在流程管理中&#xff0c;提供了符合国家党政机关公文格式标准&#xff08;GB/T 9704—2012&#xff09;的公文编辑组件&#xff0c;可以让用户在包含公文管理的项目实施过程中&#xff0c;轻松地实现标准化公文格式的在线编辑、痕迹保留、手写签批等功能。并且可以…

Spire.PDF for .NET【文档操作】演示:将PDF拆分为多个PDF文件

Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0c;开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理&#xff0c;且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

基于Springcloud+Vue校园招聘系统 Eureka分布式微服务

以行动研究为主&#xff0c;辅以文献法、教育实验法和个案研究法等方法相结合的研究方法。在研究方法&#xff0c;遵循软件工程中软件生命周期的规则。概括来讲可以划分成三大步&#xff1a;系统规划、系统开发和系统运行维护。将其上述步骤细分下来&#xff0c;可以分为以下8小…

[Qt学习笔记]Qt实现鼠标点击或移动时改变鼠标的样式以及自定义鼠标样式

1、鼠标样式介绍以及对应函数 在Qt中大概有20种左右的内置鼠标样式&#xff0c;一般使用setCursor(Qt::CursorShape shape)来进行设置&#xff0c;一般常用的有标准箭头、手型&#xff0c;双箭头等等形状&#xff0c;对于不同的操作系统下&#xff0c;鼠标的样式显示会略有差别…

java Flink(四十三)Flink Interval Join源码解析以及简单实例

背景 之前我们在一片文章里简单介绍过Flink的多流合并算子 java Flink&#xff08;三十六&#xff09;Flink多流合并算子UNION、CONNECT、CoGroup、Join 今天我们通过Flink 1.14的源码对Flink的Interval Join进行深入的理解。 Interval Join不是两个窗口做关联&#xff0c;…

智慧城市的发展趋势与挑战:未来展望

随着信息技术的飞速发展&#xff0c;智慧城市已成为现代城市发展的重要方向。智慧城市通过集成应用先进的信息通信技术&#xff0c;实现城市管理、服务、运行的智能化&#xff0c;为城市的可持续发展注入了新的活力。然而&#xff0c;在智慧城市的发展过程中&#xff0c;也面临…

C语言——结构体自定义类型

目录 结构体类型 声明结构体 结构体的特殊声明 创建结构体变量和初始化结构体变量 结构体的自引用 结构体内存对齐 对齐规则 内存对齐存在意义 默认对齐数的修改 结构体传参 结构体实现位段 了解位段是什么 位段的内存分配 位段有跨平台的问题及使用注意事项 C语言…

电脑插上网线之后仍然没网络怎么办?

前言 有小伙伴在使用Windows系统的时候&#xff0c;经常会遇到电脑没网络&#xff0c;但又不知道具体怎么调整才好。 本篇内容适合插网线和使用Wi-Fi的小伙伴&#xff0c;文章本质上是重置电脑的网络设置。 注意事项&#xff1a;网络重置操作会让已连接过的wifi密码丢失&…

51单片机学习笔记7 串转并操作方法

51单片机学习笔记7 串转并操作方法 一、串转并操作简介二、74HC595介绍1. **功能**&#xff1a;2. **引脚**&#xff1a;3. **工作原理**&#xff1a;4. 开发板原理图&#xff08;1&#xff09;8*8 LED点阵&#xff1a;&#xff08;2&#xff09;74HC595 串转并&#xff1a; 三…

【PyTorch][chapter 22][李宏毅深度学习][ WGAN]【实战三】

前言&#xff1a; 本篇主要讲两个WGAN的两个例子&#xff1a; 1 高斯混合模型 WGAN实现 2 MNIST 手写数字识别 -WGAN 实现 WGAN 训练起来蛮麻烦的,如果要获得好的效果很多超参数需要手动设置 1&#xff1a; 噪声的维度 2: 学习率 3&#xff1a; 生成器&#xff0c;鉴别器…

Bert的一些理解

Bert的一些理解 Masked Language Model (MLM)Next Sentence Prediction (NSP)总结 参考链接1 参考链接2 BERT 模型的训练数据集通常是以预训练任务的形式来构建的&#xff0c;其中包括两个主要任务&#xff1a;Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。…