239Sliding Window Maximum

来源:互联网 发布:iphone移动数据怎么关 编辑:程序博客网 时间:2024/04/30 02:12

这题的brute force很简单,可以做到O(NK),通过是没有问题的,只是太慢。

高效的方法是维护一个优先级队列,保证每次获取最大值都可以在O(1)时间完成,而每个元素进队出队仅1次,也就使得总时间是O(N)。

我维护的元素是 (数值,下标) 维护下标是为了某些时刻删减元素 (当 cur_index- k== queue[0][0] 时刻,队列的头元素应该被删除)。

这个优先级队列保证按照 数值从大到小排序,因此当有新元素到来的时候,我们比较新元素的数值 和原先队列的最后一个,如果原先队列最后一个比新元素的数值小,则删除了原先的最后一个,然后继续比较,直到 最后一个元素 不小于 新元素。这样就能保证,数值是从大到小排序的了。

0 0
原创粉丝点击