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;
      }
    };

  • 相关阅读:
    14.Java基础_函数/函数重载/参数传递
    98. 验证二叉搜索树(深搜)
    13.Java基础_数组内存图
    12Java基础_数组定义格式/动态初始化/静态初始化
    计算几何基础
    11.Java基础_IDEA常用快捷键
    Add Two Numbers
    Two Sum
    登录界面id属性的使用
    系统查看
  • 原文地址:https://www.cnblogs.com/shoemaker/p/4769379.html
Copyright © 2011-2022 走看看