【Day8 中高难度算法挑战】滑动窗口的最大值
介绍总而言之是时候利用暑假锻炼一下算法技术,一提算法面试就面露难色
总而言之是时候利用暑假锻炼一下算法技术,一提算法面试就面露难色的情形总不能一直持续下去。本栏目面向有一定基础的编程爱好者,每天(如果up不鸽)分享并解析一道LeetCode中高难度题目(通常是hard)。有兴趣的小伙伴可以一起跟着做并且讨论解法。目前的教材是花花酱的Leetcode Problem List【1】.
适合人群:
(资料图)
有一定算法基础,但是还未能顺利通过笔试/面试,总觉得算法题目想不明白的你。
不适合人群:
算法入门级选手(一上来就做难题可能并不合适,建议首先专注简单/中等题目)
非常不适合人群:
算法竞赛选手(这种小儿科的问题完全是在浪费您的时间)
过往题目在这里!
题目看这里,leetcode第二三九题,hard难度:/problems/sliding-window-maximum/
强烈建议读者自己先做(不过真的会有读者吗,笑),有任何问题欢迎在评论区讨论,up看到了会及时回复。做完了欢迎在评论区打卡~
基本上是非常普通的优先级队列应用,注意python里只有最小堆,如果想每次搞定最大的值,需要每次push时加一个负号才行。另一个易错点在于,堆里的值可能会过期,当它过期时要及时去除,这就要求我们同时把元素的位置也压入堆中。
这是使用单调队列的最优解,说实话我一开始没想出来,太难力。双端队列这一点尤其难想。不过仔细考虑,入队的时候,如果前面还有比当前值小的元素,那一定要把那些元素弹出。既然我们要入队位置i的元素,那说明滑动窗口已经到了i这个地方。有两种情况,第一种情况是,i之前的队列中已经没有比i位置还大的元素,这种情况下我们应该把队列清空,只留下i位置的元素。第二种情况是,队列里还有比当前i还大的元素j,不过还没过期,那么我们应该返回j元素。等到j元素过期,我们选最大元素的时候还是要考虑i位置的元素,而不是那些比i小的排在i前面的元素,那些元素在i出现时就已经没用了。
最近如果可以,我选一些单调队列的题目来做做看。
对于解答一:
my_heap[0][1] <= i-k, 这里为什么不是<而是<=?
在第二个for循环中,如果我们每次都push一个再pop一个,那么堆里不就一直是k个元素吗?这样k个元素的最大堆,始终会返回其中最大的元素。请问可以这样做吗?为什么可以或者不可以?(<-笔者最讨厌的问问题的方式之一,看起来就是不会的感觉)
欢迎把答案写在评论区。
今天依旧是不知道吃什么的一天,去墨西哥餐厅进行了新一轮的抽奖,依旧是先点菜再查意思。这次选了quesabirria(墨西哥炸玉米饼)。从菜单的图片看,外表只是平平无奇的玉米饼,但是实际到手发现中间夹了酱牛肉,味道相当不错。那么今天的音乐推荐是,同样封面平平无奇,实际上却意外好听的性空山,来自安婧_Tiffany。说起来,打了这么多次ttup的广告,什么时候小罗的米才能到账啊(开玩笑,并没有这种东西)
【1】/blog/leetcode-problem-categories/
标签:
介绍总而言之是时候利用暑假锻炼一下算法技术,一提算法面试就面露难色
中新网上海7月27日电(王笈)中国国际数字娱乐产业大会(CDEC)27日在上海
诸多的对于直发棒怎么弄卷发显发量,直发棒怎么弄卷发这个问题都颇为感
7月28日,成都大运会第二个比赛日,射箭比赛继续进行并产生复合弓男、
第一次知道曹操,应该是在小学时,课本中有一首曹操所作的《观沧海》,
华东师范大学康复科学系大三本科生李厚毅是一位双耳人工耳蜗植入者。大
潮新闻·浙江日报记者王雨红7月28日,浙江日报人物版刊发《首位入选浙
1、金山游侠修改工具有两种使用方法:一:普通修改:比如:以修改生命
今年上半年,白酒行业普遍存在价格倒挂。在行业进入新一轮调整周期,酒
1、青云志结局:鬼王伤重,幽姬和金瓶儿前来探望,鬼王表示金瓶儿上次