当前位置:   article > 正文

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

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

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

示例 1:

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

输入: nums = [1], k = 1
输出: [1]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

提示:

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

from collections import defaultdict

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        foo = defaultdict(int)
        count = 0
        ans = []
        for i in range(len(nums)):
            if nums[i] not in foo.keys():
                xx={nums[i]:1}
                foo.update(xx)
            else:
                foo[nums[i]]+=1
        res = sorted(foo.items(),key=lambda item:item[1],reverse=True)
        return list(map(lambda x:x[0],res))[:k]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
dit={}                   #{元素值:出现频率}                
        for i in nums:           #使用字典的特性(相同元素后面值的会覆盖前面的值)统计元素的频率,时间复杂度为O(N)
            if i not in dit:     #如果不存在,则将其存入字典中,此时该值的出现频率为1
                dit[i] = 1
            else:                #如果已经存在,则其出现频率加1
                dit[i] =  dit[i]+1

        temp = []                     #由于字典无法排序,因此需要先将字典转换为列表,列表中的每一个元素为 键-值 构成的元祖
        for item in dit.items():      #使用字典的items函数,获取 键-值对元祖列表
            temp.append(item[::-1])   #这里需要对出现频率进行排序,因此将每一个元祖元素进行转置
        
        # temp = list(map(lambda x:(x[1],x[0]),dit.items()))  #上面的for循环也可以这样实现

        temp.sort(reverse=True)       #对列表进行排序,对于每一个元素都是元祖的列表来说,其排序是按照元祖的第一个元素进行的
        return [temp[i][1] for i in range(k)]  #使用列表推导式求前k个高频元素

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        freq = dict()
        for i in nums:
            if i not in freq:
                freq[i] = 1
            else:
                freq[i] += 1
        keys_freq = []
        keys = []
        for i in freq:
            keys = freq.keys()
            keys_freq.append(freq[i])
        tmp = sorted(keys_freq)
        min_k = tmp[-k]
        result = []
        for i in keys:
            if freq[i] >= min_k:
                result.append(i)
        return result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/72845
推荐阅读
相关标签
  

闽ICP备14008679号