zoukankan      html  css  js  c++  java
  • [LeetCode] #23 Merge k Sorted Lists

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

    本题是多链表融合,可以选择利用归并算法思想,两两链表融合后再归并,也可以一起融合。本文是一起融合的想法,利用最小堆,每次选取最小的元素。时间:424ms

    代码如下:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        struct CompareListElement {
            bool operator ()(const ListNode* a, const ListNode* b) const{
                return (a->val > b->val);
            }
        };
        ListNode *mergeKLists(vector<ListNode *> &lists) {
            vector<ListNode*> vecK;
            ListNode* dummyHead = new ListNode(0);
            ListNode* tail = dummyHead;
            for (vector<ListNode *>::size_type i = 0; i < lists.size(); ++i) {
                if (lists[i] != NULL) {
                    vecK.push_back(lists[i]);
                }
            }
            std::make_heap(vecK.begin(), vecK.end(), CompareListElement());
            while (!vecK.empty()) {
                tail->next = vecK.front();
                tail = tail->next;
                std::pop_heap(vecK.begin(), vecK.end(), CompareListElement()); 
                vecK.pop_back();
                if (tail->next != NULL) {
                    vecK.push_back(tail->next);
                    std::push_heap(vecK.begin(), vecK.end(), CompareListElement()); 
                }
            }
            return dummyHead->next;
        }
    };
    “If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime.”
  • 相关阅读:
    java快速排序代码
    java操作redis实现和mysql数据库的交互
    python 操作mysql数据库存
    JAVA 操作远程mysql数据库实现单表增删改查操作
    URI和URL及URN的区别
    day06_字符集设置
    day6_oracle手工建库
    day08_SGA后半部分
    day08_存储
    day05_sqlloader基础
  • 原文地址:https://www.cnblogs.com/Scorpio989/p/4545904.html
Copyright © 2011-2022 走看看