347. 前 K 个高频元素
初看 题目我的想法是:
1.从数学上来看,只能遍历到最后,因为前K个的最后一个可能是2,无法通过其他手段去避免
2.优化手段是怎么去找到这个值,并且添加1。因为题目是不需要按顺序进行排列的,所以很难想就是这样硬加,最后排序做。
首先还是实现了一版:
class Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: dic = {} for num in nums: if num not in dic.keys(): dic[num] = 1 else: dic[num] += 1 dic = dict(sorted(dic.items(), key = lambda x:x[1], reverse=True)) result = list(dic.keys()) return result[:k]
卡在最后三行比较久,不记得sorted的加lambda的用法,以及最后return是list,不能使用dict.keys()[:k]这种方式。
看视频。
对前k个进行排序之前也想到了,比较昨天是只需要维护一个小双向队列嘛,但是这题值维护k个肯定是不够的,因为后面有可能有新的冒出来进行覆盖。所以看看大顶堆小顶堆是怎么做的吧。
看来就是先进行统计,输出时不对所有元素进行排序(太复杂nlogn),只需要维护一个频率最高的k个元素进行堆的push和pop。所以主要是堆的认识、小顶堆的理解和应用。
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号