zoukankan      html  css  js  c++  java
  • LeetCode 前K个高频元素

    LeetCode  前K个高频元素

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

    例如,

    给定数组 [1,1,1,2,2,3] , 和 k = 2,返回 [1,2]

    注意:

    • 你可以假设给定的 总是合理的,1 ≤ k ≤ 数组中不相同的元素的个数。
    • 你的算法的时间复杂度必须优于 O(n log n) , 是数组的大小。

    1.  桶排序

     时间复杂度O(n)

    1. 遍历数组nums,利用字典cntDict统计各元素出现次数。
    2. 遍历cntDict,利用嵌套列表freqList记录出现次数为i( i∈[1, n] )的所有元素
    3. 逆序遍历freqList,将其中的前k个元素输出。

    defaultdict的使用!
     1 from collections import defaultdict
     2 class Solution(object):
     3     def topKFrequent(self, nums, k):
     4         """
     5         :type nums: List[int]
     6         :type k: int
     7         :rtype: List[int]
     8         """
     9         n = len(nums)
    10         cntDict = defaultdict(int)
    11         for i in nums:
    12             cntDict[i] += 1
    13         print(cntDict)
    14         freqList = [[] for i in range(n + 1)]
    15         for p in cntDict:
    16             freqList[cntDict[p]] += p,
    17         print(freqList)
    18         ans = []
    19         #最多出现n次,从n...1
    20         for p in range(n, 0, -1):
    21             ans += freqList[p]
    22         return ans[:k]

    使用字典

    sorted 语法:

    sorted(iterable[, cmp[, key[, reverse]]])

    参数说明:

    • iterable -- 可迭代对象。
    • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
    dic.items()

    返回可遍历的(键, 值) 元组数组。

    key=lambda item: item[1]

    lambda是一个隐函数,是固定写法,不要写成别的单词;item表示列表中的一个元素,在这里,表示一个元组,item只是临时起的一个名字,你可以使用任意的名字;item[0]表示元组里的第一个元素,当然第二个元素就是item[1];所以这句命令的意思就是按照列表中第一个元素排序  

    从小到大排序时 reverse=False,从大到小排序是True!

     1 class Solution:
     2     def topKFrequent(self, nums, k):
     3         """
     4         :type nums: List[int]
     5         :type k: int
     6         :rtype: List[int]
     7         """
     8         dic = {}
     9         for key in nums:
    10             if key not in dic.keys():
    11                 dic[key] = 1
    12             else:
    13                 dic[key] += 1
    14         print(dic)
    15         #对字典进行排序,按照第二个元素
    16         item = sorted(dic.items(),key = lambda x:x[1],reverse=True)
    17         print(item)
    18         return [item[i][0] for i in range(k)]
  • 相关阅读:
    jsp九大内置对象和4个域对象
    小甜点
    response编码
    request请求编码处理
    防盗链模拟
    request浏览器判断
    request获取ip
    ServletConfig
    HttpServlet原理
    Servlet,GenericServlet,httpServlet区别
  • 原文地址:https://www.cnblogs.com/yxh-amysear/p/9294161.html
Copyright © 2011-2022 走看看