1. 题目描述
题目来源:力扣
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例1. 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]
示例2. 输入: nums = [1], k = 1 输出: [1]
2. 题解
解题思路,利用字典,统计nums中每个数字出现的次数。
dic{数字:次数}
根据出现的次数,对其进行排序。这里选用栈,过程如下:
(1)若是数字未在栈中,将数字放入栈顶;
(2)若数字出现在栈中,和前面的元素的次数比较,若是大,则前移,直到小于为止。
返回栈底k个元素。
代码如下,
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
dic = {}
queue = []
for i in nums:
if i not in dic.keys():
dic.setdefault(i, 1)
else:
dic[i] += 1
queue = self.insert(queue, dic, i)
return queue[0:k]
def insert(self, queue, dic, i):
if i not in queue:
queue.append(i)
return queue
else:
index_i = queue.index(i)
index_j = index_i - 1
while index_j >= 0 and dic[queue[index_i]] > dic[queue[index_j]]:
index_j -= 1
queue.pop(index_i)
queue.insert(index_j + 1, i)
return queue
if __name__ == '__main__':
sol = Solution()
nums = [1,]
k = 1
r = sol.topKFrequent(nums, k)
print(r)