【华为OD】2024D卷——查找众数与中位数

复制代码
题目:
众数是指一组数据中出现次数量多的那个数,众数可以是多个。
中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以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

解题思路:

1、统计数字频率

2、找出众数(频率最大数),组成新数组

3、计算新数组中位数


代码部分:

python 复制代码
def median_in_mode(nums):

    # # 使用hash表(字典) 统计频率
    # freq = {}
    # for num in nums:
    #     if num in freq:
    #         freq[num] += 1
    #     else:
    #         freq[num] = 1
    # max_freq = max(freq.values())   #最大次数
    # new_nums= [num for num, cnt in freq.items() if cnt == max_freq]
    
    # 使用数组统计频率
    new_nums = []  # 存储众数
    nums_count = []  # 存储计数
    for x in nums:
        nums_count.append(nums.count(x))
    # max_time = max(x for x in nums_count)    #最大次数
    max_time = max(nums_count)
    for x in nums:
       if nums.count(x) == max_time:
           new_nums.append(x)
    length = len(new_nums)
    new_nums.sort()  #众数数组排序
    if length % 2 == 0:
       result = (new_nums[length // 2] + new_nums[length // 2 - 1]) // 2        #偶数位,返回中间两值平均数
    else:
       result = new_nums[length // 2]       #奇数位,返回中间值
    return result


if __name__ == '__main__':
    nums = list(map(int, input().split()))
    result = median_in_mode(nums)
    print(result)

知识点:列表、hash表


结语:越简单的题目解法应该越多,请路过大神留下新的思路供本小白学习一下,打开思路

相关推荐
这个男人是小帅31 分钟前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
小白学大数据4 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Shy9604185 小时前
Doc2Vec句子向量
python·语言模型
秀儿还能再秀7 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
阿_旭8 小时前
如何使用OpenCV和Python进行相机校准
python·opencv·相机校准·畸变校准
幸运的星竹8 小时前
使用pytest+openpyxl做接口自动化遇到的问题
python·自动化·pytest
kali-Myon9 小时前
ctfshow-web入门-SSTI(web361-web368)上
前端·python·学习·安全·web安全·web
B站计算机毕业设计超人10 小时前
计算机毕业设计Python+大模型农产品价格预测 ARIMA自回归模型 农产品可视化 农产品爬虫 机器学习 深度学习 大数据毕业设计 Django Flask
大数据·爬虫·python·深度学习·机器学习·课程设计·数据可视化