
优先级队列
文章平均质量分 81
CP Coding
这个作者很懒,什么都没留下…
展开
-
LeetCode 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit - 亚马逊高频题29
题目给定一个整型数组nums和一个整数limit,要求找到一个最长的子数组,使得该子数组中的任意两个数的差的绝对值都小于等于limit。我们知道数组中任意两个数的差的绝对值的范围都不会超过数组中的最大值与最小值的差,因此我们只要关心子数组中的最大值和最小值,知道最大值与最小值的差不超过limit就符合题目要求。本题的暴力解法就是,就是用两个循环找出从任意一个位置出发满足条件的所有最长子数组。暴力解法的时间复杂度是O(n^2)会超时。关于子数组的问题,最常用的一种解法就是移动窗口(Sliding Wi原创 2022-04-07 23:14:21 · 924 阅读 · 0 评论 -
LeetCode 1167. Minimum Cost to Connect Sticks - 亚马逊高频题19
根据题意,花费是由棍子长度决定的,棍子越长花费越多。另外两根棍子连在一起后,还需要跟后面的棍子连在一起,也就是说先被挑中连接的棍子,将会在后面再次跟其它棍子相连接,它们的花费也将会被累加。本着贪心法则,我们当然希望长的棍子花费尽量少地被累加,因此我们应该每次先挑最短的两根相连,尽可能地把长的棍子留到后面。原创 2022-03-29 21:26:26 · 510 阅读 · 0 评论 -
LeetCode 1492. The kth Factor of n - 亚马逊高频题4
题目给定两个正整数n和k,要求找出n的所有因子数按从小到大排好序后的第k个因子。一个正整数的因子是从1到n(包括n本身)能被n整除的所有整数。因此本题可以直接用一个for循环从1开始到n挨个找出能被n整除的整数,当到达了第k个能被n整除的数,该数就是要找的第k个因子。但是本题的难度级别被标位medium,必然有更优解法。原创 2022-03-14 22:18:06 · 651 阅读 · 0 评论 -
LeetCode 2034. Stock Price Fluctuation - 优先级队列(Priority Queue)系列题10
题目说给定一个关于股票价格记录的数据流,它包含时间戳及其对应的股票价格。现在要求实现一个股票价格类原创 2022-02-10 15:59:39 · 552 阅读 · 0 评论 -
LeetCode 871. Minimum Number of Refueling Stops - 优先级队列(Priority Queue)系列题8
解题思路:为了达到加油次数最少,可以先尽量让汽车用现有的油一直往前开沿途都不停下加油,如果能一路开到目的地那最好,如果在中途某一站发现所剩油量不足以到达下一站,这说明汽车在前面经过的加油站至少要停下加油一次,本着贪心法则自然是从储油量从多到少的加油站开始加,只要加到能保证汽车至少能到达下一站就让汽车继续前行直到下次油量不够原创 2022-02-08 11:57:32 · 352 阅读 · 0 评论 -
LeetCode 767. Reorganize String - 优先级队列(Priority Queue)系列题7
题目给定一个字符串,要求重排字符串里的字符使得任意两个相邻的字符都是不同的字符,返回重排后的字符串,如果无法做到就返回一个空字符串。很明显,如果有某一个字符的出现频率超过总个数的一半(总个数n为偶数时一半是n//2, 为奇数时一半规定为n//2 + 1, 统一起来就是频率大于(n + 1) // 2),那么不管怎么重排都至少有一对相邻的字符是相同的。因此,首先需要保证所有字符的个数都要不超过总个数的一半(<=(n+1)//2),然后再进行重排。那该如何重排才能保证任意相邻的字符是不相同的呢?原创 2022-02-06 15:04:43 · 485 阅读 · 0 评论 -
LeetCode 1353. Maximum Number of Events That Can Be Attended - 优先级队列(Priority Queue)系列6
这一题看起来跟253. Meeting Rooms II有点像,但要更复杂一点,因为对于一个进行多天的活动,并不需要全程参与直到结束那天,而是只要选择开始到结束之间的任意一天参与就行。限制是在同一天里只能参加一个活动,现在问题的关键是在某一天里如果有多个活动进行,应该选择参加哪一个活动那能使最后参加的活动个数最多?原创 2022-02-05 22:30:16 · 485 阅读 · 0 评论 -
LeetCode 295. Find Median from Data Stream - 优先级队列(Priority Queue)系列题5
如果我们能把数字平均分成两组,保证第一组的所有数字都不大于第二组中所有数字,并且时刻保持两组数字个数均衡(保持第一组数字个数等于或比第二组数字个数多1),这样的话,中位数永远是第一组中的最大值(总个数为奇数),或者第一组最大值与第二组最小值的和除以2(总个数为偶数)。要快速得到一组数字中的最大值或最小值,优先级队列(最大堆或最小堆)是很理想的数据结构。原创 2022-02-04 22:02:44 · 310 阅读 · 0 评论 -
LeetCode 759. Employee Free Time - 优先级队列(Priority Queue)系列题4
这题要是把员工工作时间换成会议时间,那这道题其实就是253. Meeting Rooms II的拓展。因此本题解法可以延续253. Meeting Rooms II的基本思路原创 2022-02-04 01:06:16 · 524 阅读 · 0 评论 -
LeetCode 347. Top K Frequent Elements - 优先级队列(Priority Queue)系列题3
题目给定一个数组nums和一个整数k,有些数字在数组nums里可能出现多次。要求找出出现频率最高的k个数字。很明显是一道Top K的题目,可以用优先级队列来搞定,由于要保留频率高的数字排除频率低的数字,可以使用最小堆,heapq默认就是最小堆原创 2022-02-03 06:06:46 · 272 阅读 · 0 评论 -
LeetCode 973. K Closest Points to Origin - 优先级队列(Priority Queue)系列题2
对于Top K的问题,基本上都可以用优先级队列(最小堆或最大堆)来解决。Python下的优先级队列可以用heapq来实现原创 2022-02-02 22:44:39 · 513 阅读 · 0 评论 -
LeetCode 253. Meeting Rooms II - 优先级队列(Priority Queue)系列题1
题目给定一个区间数组intervals,每个区间intervals[i]=[starti, endi]表示一个会议的起始和结束时间。一个会议需要一个会议室,但是如果有之前的任意一个会议结束了,那么新的会议就可以使用旧的会议室而不需要申请新的会议室,否则需要申请一个新的会议室。问最多需要多少个会议室可以满足所有会议能按时召开。会议召开的顺序是由其起始时间决定的,对于一个会议,那些起始时间比它小的会议都已经召开了,如果那些已经召开的会议中有的已经结束了,那么这个新的会议就不要申请新的会议室了。原创 2022-02-01 23:53:30 · 1015 阅读 · 0 评论