美文网首页
2020-03-20 刷题2(堆)

2020-03-20 刷题2(堆)

作者: nowherespyfly | 来源:发表于2020-03-29 18:36 被阅读0次

最小的k个数

采用最大堆(优先队列)的做法,首先将前k个元素入堆,剩下的元素依次与堆顶元素比较,如果更小,就将堆顶元素弹出,小元素入堆。最后堆中的k个元素就是最小的k个数。每次入堆的代价是O(logn),所以总的时间代价是O(klogn).

class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        vector<int> min_k;
        priority_queue<int> heap;
        int i = 0;
        for(; i < k; i++)
            heap.push(arr[i]);
        while(k && i < arr.size()){
            if(arr[i] < heap.top()){
                heap.pop();
                heap.push(arr[i]);
            }
            i++;
        }
        for(int i = 0; i < k; i++){
            min_k.push_back(heap.top());
            heap.pop();
        }
        return min_k;
    }
};

23 合并k个有序列表

还是用堆来做的,以ListNode*为节点建一个堆,需要重载一下比较运算符,重载的操作还是要记一下的。

class Solution {
public:
    struct cmp{
        bool operator()(ListNode *a, ListNode *b){
            return a -> val > b -> val;
        }
    };
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        priority_queue<ListNode*, vector<ListNode*>, cmp> heap;
        ListNode *merge_list = new ListNode(0), *cur = merge_list;
        int k = lists.size();
        for(int i = 0; i < k; i++){
            if(lists[i] != NULL)
                heap.push(lists[i]);
        }
        while(!heap.empty()){
            ListNode *tmp = heap.top();
            heap.pop();
            if(tmp -> next != NULL)
                heap.push(tmp -> next);
            cur -> next = tmp;
            cur = tmp;
        }
        return merge_list -> next;
    }
};

相关文章

  • 2020-03-20 刷题2(堆)

    最小的k个数 采用最大堆(优先队列)的做法,首先将前k个元素入堆,剩下的元素依次与堆顶元素比较,如果更小,就将堆顶...

  • 2020-03-20刷题笔记

    https://www.jianshu.com/p/801318c77ab5 python标准库模块heapq 该...

  • 2022-06-03

    日更第2天 昨天计划了一堆。结果… 1.幼师刷题。看了第3条材料分析题(14分),不亚于50分的作文题! 也记录了...

  • 四目相对

    无心刷题题成堆,有心刷题错一堆 公告没出,揪心 趁青春年华,恰春风不燥,拥抱生活,享受快乐,无谓得失,把灵魂安放在...

  • java刷题-2

    总结 多线程控制并发顺序问题,线程之间通信问题AtomicIntegerlock wait + notifyAll...

  • PTA刷题总结-Part 3 数据结构与算法

    PTA刷题总结-Part 1 基础部分PTA刷题总结-Part 2 模拟与数学问题PTA刷题总结-Part 3 数...

  • PTA刷题总结-Part 2 模拟与数学问题

    PTA刷题总结-Part 1 基础部分PTA刷题总结-Part 2 模拟与数学问题PTA刷题总结-Part 3 数...

  • 刷题刷题

    时间紧迫,任务繁重,又有疫情影响,搞的人心惶惶,一时间复习得不安宁,又舍不得摆烂。 在焦灼、惶恐的情绪中,紧张急迫...

  • 2022-09-16

    刷题,刷题还是刷题

  • 2018-07-16

    刷题,祸害的何止是教育? 报班,刷题;买练习册,刷题;家教,刷题;跟不上,刷题;学得好,刷题;为了抢跑,刷题;为了...

网友评论

      本文标题:2020-03-20 刷题2(堆)

      本文链接:https://www.haomeiwen.com/subject/kwxjyhtx.html