📌  相关文章
📜  查找给定数组中出现次数最多的 k 个数字(1)

📅  最后修改于: 2023-12-03 14:55:35.919000             🧑  作者: Mango

查找给定数组中出现次数最多的 k 个数字

在程序开发中,经常需要在一个数组中查找出现次数最多的元素。这种任务在数据分析、排序和统计中非常常见。本篇介绍了如何使用Python编写一个函数,来查找给定数组中出现次数最多的前k个数字。

问题描述

给定一个包含n个整数的数组nums,我们需要找到出现次数最多的k个数字。如果出现次数相同,则按照数字大小降序排列。

解决方案

为了解决这个问题,我们可以使用字典来统计出现次数。首先遍历数组,将每个数字作为字典的键,出现次数作为对应键的值。然后按照值进行降序排序,并取前k个键即可。

下面是使用Python编写的示例代码:

def top_k_frequent(nums, k):
    # 使用字典来统计出现次数
    count = {}
    for num in nums:
        count[num] = count.get(num, 0) + 1
    
    # 按照值进行降序排序
    sorted_nums = sorted(count, key=count.get, reverse=True)
    
    # 返回前k个键
    return sorted_nums[:k]
示例代码解析

首先,我们创建一个空的字典count来存储数字的出现次数。然后,遍历数组nums,对于每个数字num,我们使用字典的get方法来获取其对应的值,如果值不存在则默认为0,然后将值加1。经过这一步,我们就统计了每个数字的出现次数。

接下来,我们使用sorted函数来对字典count进行排序,其中的key参数指定了排序规则,即按照字典的值进行排序。由于我们需要降序排列,所以使用reverse=True参数。排序后的结果是一个按照出现次数降序排列的键列表。

最后,我们使用切片操作[:k]来截取前k个键,然后返回这个列表作为结果。

使用示例
nums = [1, 3, 2, 2, 1, 3, 1]
k = 2
result = top_k_frequent(nums, k)
print(result)  # Output: [1, 2]

上述示例输入一个数组[1, 3, 2, 2, 1, 3, 1],要求找到出现次数最多的2个数字。经过运行后,输出结果为[1, 2],即数字1和2是出现次数最多的两个数字。

总结

本文介绍了如何使用Python编写一个函数来查找给定数组中出现次数最多的k个数字。通过使用字典进行统计和排序,我们可以很方便地解决这个问题。希望本文对你的编程工作有所帮助!