Leetcode 347. 前 K 个高频元素

给定一个非空的整数数组,返回其中出现频率前 高的元素。

 

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2

输出: [1,2]

示例 2:

输入: nums = [1], k = 1

输出: [1]

 

提示:

  • 你可以假设给定的 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
  • 你的算法的时间复杂度必须优于 O(n log n) , 是数组的大小。
  • 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。
  • 你可以按任意顺序返回答案。

**难度**: Medium

**标签**: 堆、 哈希表、


# -*- coding: utf-8 -*-
# @Author  : LG

"""
执行用时:40 ms, 在所有 Python3 提交中击败了98.35% 的用户
内存消耗:16.5 MB, 在所有 Python3 提交中击败了83.91% 的用户

解题思路:
    先遍历整个列表,统计每个数字出现的次数
    然后翻转字典,统计出现次数,并排序,从翻转字典中查找对应的数字
"""
class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        record = {}
        for num in nums:
            if num not in record:
                record[num] = 1
            else:
                record[num] += 1

        record_ = {}
        for key, value in record.items():
            if value not in record_:
                record_[value] = [key]
            else:
                record_[value].append(key)

        value = list(record.values())
        value.sort(reverse=True)

        result = []
        if k == 1:
            result.extend(record_[value[0]])
            return result

        for k in set(value[:k]):
            result.extend(record_[k])
        return result