347. 前K个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
例如,
给定数组 [1,1,1,2,2,3]
, 和 k = 2,返回 [1,2]
。
注意:
思路:运用python的内置函数
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
#### 最先想到就是python的内置函数来解决这个问题
# from collections import Counter
# c = Counter(nums)
# res = []
# for item in c.most_common(k):
# res.append(item[0])
# return res
#### the second method
data, res = {}, []
for num in nums:
data[num] = data[num] + 1 if num in data else 1
sorted_data= sorted(data.items(), key=lambda x: x[1], reverse=True)
for i in range(k):
res.append(sorted_data[i][0])
return res
python几种根据的value值进行排序的方法:
sorted_data= sorted(data.items(), key=lambda x: x[1], reverse=True) ### 利用内置函数
import operator
sorted_data = sorted(data.items(), key = operator.itemgetter(1), reverse=True) #### 借助operator
f = zip(data.values(),data.keys()) ### zip 函数,zip 之后,zip函数默认会对第一个元素进行排序的,如何取消排序?测试没有成功
sorted_data = sorted(f, reverse=False)
数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和
k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和
k = 4
输出: 4
代码:
class Solution(object):
def findKthLargest(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: int
"""
#### the first method
# nums = sorted(nums, reverse = True)
# return nums[k-1]
#### the second method,使用的是冒泡排序,很遗憾,超时了
for i in range(len(nums)-1, -1, -1):
for j in range(i):
if nums[j] < nums[j + 1]:
# temp = nums[j]
# nums[j] = nums[j + 1]
# nums[j + 1] = temp
nums[j], nums[j+ 1] = nums[j+1], nums[j]
return nums[k-1]