zoukankan      html  css  js  c++  java
  • [LeetCode] 23

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

    /**
    * Definition for singly-linked list.
    * struct ListNode {
    * int val;
    * ListNode *next;
    * ListNode(int x) : val(x), next(NULL) {}
    * };
    */
    class Solution {
    public:
      ListNode* mergeKLists(vector<ListNode*>& lists) {
        if (lists.empty()) {
          return nullptr;
        }
        auto comp_func = [](ListNode* a, ListNode* b){ return (a->val >= b->val);};
        vector<ListNode*> heap;
        for (auto node : lists) {
          if (node) {
            heap.emplace_back(node);
          }
        }
        ListNode head_node(-1);
        ListNode *head = &head_node;
        make_heap(heap.begin(), heap.end(), comp_func);

        while (!heap.empty()) {
          pop_heap(heap.begin(), heap.end(), comp_func);
          auto &node = heap.back();
          heap.pop_back();
          head->next = node;
          head = node;
          if (node->next) {
            heap.emplace_back(node->next);
            push_heap(heap.begin(), heap.end(), comp_func);
          }
        }
        return head_node.next;
      }
    };

  • 相关阅读:
    ASP.NET 篇
    .NET Core 篇
    JS-CSS篇
    IIS使用篇
    WebService篇
    电脑使用篇
    数据库使用篇
    正则表达式篇
    Linux学习篇
    Leetcode 198. 打家劫舍 dp
  • 原文地址:https://www.cnblogs.com/shoemaker/p/4769379.html
Copyright © 2011-2022 走看看