本文包含如下题目:
264. Ugly Number II
295. Find Median from Data Stream
313. Super Ugly Number
347. Top K Frequent Elements
355. Design Twitter
373. Find K Pairs with Smallest Sums
378. Kth Smallest Element in a Sorted Matrix
451. Sort Characters By Frequency
264. Ugly Number II
解题思路
使用动态规划的思想,已知res[0] = 1
,此时可以得到res[1] = min(res[0]*2, res[0]*3, res[0]*5)
,然后可以求得res[2] = min(res[1]*2, res[0]*3, res[0]*5
。
代码
1 | class Solution |
295. Find Median from Data Stream
解题思路
利用STL库函数中的priority_queue
,维持一个大顶堆和一个小顶堆(利用负数实现),然后动态更新保持两个堆的元素数量的平衡,最后返回中位数。
代码
1 | class MedianFinder |
313. Super Ugly Number
解题思路
使用动态规划的思路,使用一个res
(vector)保存顺序排列的丑数,然后使用一个idx
(vector)保存每个primes中元素所对应的乘法因子,然后每次取乘法结果的最小的值作为新的丑数,同时遍历idx
进行去重操作。
代码
1 | class Solution |
347. Top K Frequent Elements
解题思路
使用unordered_map
对输入的数字进行频率统计,然后使用priority_queue
堆结构对之前得到的频率进行统计,最后将要求结果保存返回即可。
代码
1 | class Solution |
355. Design Twitter
解题思路
建立一个tweet
结构,保存tweet
的userId
,tweetId
和tweetTime(发布时间)
使用hashMap
建立user
和tweet
之间的联系,使用hashMap
和set
结构处理user
之间的follow关系,收集tweet
完成之后,使用priority_queue
进行堆排序,获取最近的10个tweet
。
代码
1 | class Twitter |
373. Find K Pairs with Smallest Sums
解题思路
遍历所有的可能情况,然后将其组合置入一个堆结构中,最后按照要求弹出返回结果。
代码
1 | class Solution |
378. Kth Smallest Element in a Sorted Matrix
解题思路I
这道题我直接用堆排序解决了。。。
代码
1 | class Solution |
解题思路II
充分利用矩阵每行每列有序的性质,维护一个最小堆,从左上角开始置入堆中,如果是首行元素,则将元素右边的元素置入堆中,这样能够避免重复,同是确保所有的可能结果都在堆中。
代码
1 | class Solution |
451. Sort Characters By Frequency
解题思路
使用unordered_map和priority_que进行hash匹配和堆排序,最后输出结果即可;
代码
1 | class Solution |