数据结构-队列
deque、huffman、堆(priority_queue)
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode23——Merge k Sorted Lists
题目大意:将K个升序的链表整合成一个 分析:链表、堆、分治归并的考察。最简单的方法就是取出K个链表中的最小值加入答案,最小值用堆(优先级队列)来维护。cmp函数讲解参考https://blog.csdn.net/ly59782/article/details/53161358。 第二种方法就是分治的思想,利用leetcode21里面的代码,两两不断合并,最终成为一个链表。 代码: 方法一:...原创 2018-04-10 20:53:46 · 101 阅读 · 0 评论 -
leetcode347——Top K Frequent Elements
题目大意:找出数组中出现频率前k高的元素们 分析:TOPK问题。类似leetcode215,使用堆来维护topk,这道题还需要使用哈希表统计元素频率。时间复杂度O(nlogk),空间复杂度O(k)。 代码: class Solution { struct cmp{ bool operator()(pair<int,int> p1,pair<int,...原创 2020-03-20 09:50:07 · 106 阅读 · 0 评论 -
leetcode253——Meeting Rooms II
题目大意:给出一些会议的开始和结束时间,求出需要的最少会议室个数 分析:map。和leetcode732其实是一道题。都是区间重叠问题,732是求最大重叠数,而这道题中需要的最少会议室个数其实就是区间最大重叠数。 用一个map(自动排序)记录端点的出入度,遍历map的过程中得到的端点度的加和最大值就是最大重叠数。 代码: class Solution { public: int ...原创 2020-03-16 10:28:11 · 387 阅读 · 0 评论 -
leetcode239——Sliding Window Maximum
题目大意:求出滑动窗口在数组中从头到尾的滑动过程中,窗口中的最大值 分析:双端队列。 用deque维护窗口滑动过程中的最大值索引。滑动窗口滑动过程相当于右界限i从0~size-1。 每滑动一次需要执行三件事:1、当前遍历到的数比队尾索引指向的数大时需要弹出队尾数,以此队列维持队首索引所指元素最大。直到当前元素小于队尾索引指向元素,才将该元素压入队尾。2、判断滑动是否导致窗口左界限滑过了队首索...原创 2020-03-14 09:41:07 · 101 阅读 · 0 评论 -
leetcode215——Kth Largest Element In An Array
题目大意:求出数组中第k大的元素 分析:最简单的,sort之后取倒数第k个,这种方法的时间复杂度是O(nlogn),效率不够高。 改进:堆(优先级队列)。采用小顶堆,优先级队列元素按从小到大排列,遍历数组将数组元素插入队列,同时保持队列内元素个数为k个,遍历结束后的队首元素即为答案。也就是保证堆内有k个元素,比他们小的元素都弹出。堆的插入O(logk),插入n次,所以算法的整体时间复杂度为O(...原创 2020-03-10 10:27:09 · 109 阅读 · 0 评论 -
poj1862——Stripies
题目大意:给出n个物品的质量,两个质量为m1和m2的物品碰撞后的总质量变为2*sqrt(m1*m2),问所有碰撞结束后,总质量最小是多少 输入:n(1 <= n <= 100) 第i个物品的质量mi(1 to 10000)(共n行) 输出:最小总质量(精确到小数点后三位) 分析:贪心的思想,每次取出最大质量的两个物品进行合并。因为合并后质量会变小,所以让...原创 2017-12-29 11:54:08 · 190 阅读 · 0 评论