题解 | #字符串出现次数的TopK问题#
字符串出现次数的TopK问题
https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# return topK string
# @param strings string字符串一维数组 strings
# @param k int整型 the k
# @return string字符串二维数组
#
import heapq
# 需要自定义类,重写__lt__方法,不管是排序还是入堆,都只使用<进行比较
class MyDict:
def __init__(self, item):
self.item = list(item)
def __lt__(self, other):
if self.item[1] != other.item[1]:
return self.item[1] < other.item[1]
# 注意是按照字典序从小到大排序的
return self.item[0] > other.item[0]
class Solution:
def topKstrings(self , strings: List[str], k: int) -> List[List[str]]:
# write code here
my_map = {}
for i in strings:
if my_map.get(i) is None:
my_map[i] = 1
else:
my_map[i] += 1
# 把字典转换成列表,并维护一个大小为K的堆
res = []
for item in my_map.items():
if len(res) == k:
heapq.heappushpop(res, MyDict(item))
else:
heapq.heappush(res, MyDict(item))
temp = [heapq.heappop(res).item for _ in range(len(res))]
# 因为是小顶堆需要反转一下
temp.reverse()
return temp
python3,采用堆排序的思路,使用heapq实现,时间复杂度O(nlogk)
2023.12.19 字节国际化电商测开社招一面算法题,当时用暴力破解写出来了,想到了堆排序的思路但是写不出来,寄
网易游戏公司福利 548人发布
查看11道真题和解析