题目: 众数是指一组数据中出现次数量多的那个数,众数可以是多个。 中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以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表
结语:越简单的题目解法应该越多,请路过大神留下新的思路供本小白学习一下,打开思路