priority queue
我要上岸!!!
这个作者很懒,什么都没留下…
展开
-
LintCode 486 Merge k Sorted Arrays
思路要求时间复杂度O(N logk)使用priorityqueue组成最小堆。堆的大小为k,首先将所有数组的第一个元素放进去,需要记录下是哪一个数组的第几个元素。然后每次从pq中拿出最小的元素加入答案序列,然后根据拿出来的那个元素的row和col,将与其同数组的下一个元素加入pq,保证pq的大小始终是k。【实现:可以新建一个class去存储每一个元素所在的row,col和val,然后对于pq...原创 2019-03-14 08:31:21 · 251 阅读 · 0 评论 -
Leetcode 295 Find Median from Data Stream
思路step1:当max-heap(存的是左半边元素,较小者)为空或者待加入元素小于等于max-heap顶元素,则加入max-heap;否则加入min-heap(存的较大元素,右半边元素)。step2: 如果经过step1后,maxheap的size比min-heap的size大超过1,那么就把maxheap的堆顶元素给min-heap;反之亦反。求中位数:两个pq的size之和为偶数则加入...原创 2019-03-13 05:54:17 · 141 阅读 · 0 评论 -
LeetCode 692 Top K Frequent Words
思路自定义类Pair用于存储String和对应的出现次数。首先遍历一遍所有字符串,将所有字符串和其出现次数先存储在一个hashmap中;然后遍历整个hashmap,在创建pair的同时将其插入一个priority queue中(最小堆);最后将pq中的所有元素poll出来,然后做一个逆序后输出即可。【需要自定义优先队列的比较器,因为参与排序的键有2个:freq和str的顺序。其中freq是越高...原创 2019-03-13 13:19:23 · 149 阅读 · 0 评论 -
LeetCode 1057 Campus Bikes
思路、思路:使用priority queue并且重写比较器,(o1,o2):当需要递增/最小堆时,o1<o2:-1;递减/最大堆时,o1-o2:1. 然后根据给出的条件构造每一个Triple然后将其放入pq中。然后在填写result数组时,要先判断poll出来的worker和bike有没有被用过,用过就直接continue,可以使用2个boolean数组来进行判断。时间复杂度O(NM l...原创 2019-10-11 12:31:12 · 984 阅读 · 0 评论