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.

    题目意思:k个有序链表合并后仍为一个有序链表

    解题思路:我先将链表存储在vector中,然后我用新的vector去存储链表中的每个节点,之后快速排序(stl std::sort),然后再对排序过后的节点组成链表,不是最优解,但是一个比较容易想的方法,时间复杂度是O(kn*logkn)

     1 #include <stdio.h>
     2 
     3 struct ListNode {
     4      int val;
     5     ListNode *next;
     6     ListNode(int x) : val(x), next(NULL) {}
     7 };
     8 
     9 #include <vector>
    10 #include <algorithm>
    11 
    12 bool cmp(const ListNode *a, const ListNode *b){
    13     return a->val < b->val;
    14 }
    15 
    16 class Solution {
    17 public:
    18     ListNode* mergeKLists(std::vector<ListNode*>& lists) {
    19         std::vector<ListNode *> node_vec;        
    20         for (int i = 0; i < lists.size(); i++){
    21             ListNode *head = lists[i];
    22             while(head){
    23                 node_vec.push_back(head);
    24                 head = head->next;
    25             }
    26         }
    27         if (node_vec.size() == 0){
    28             return NULL;
    29         }        
    30         std::sort(node_vec.begin(), node_vec.end(), cmp);
    31         for (int i = 1; i < node_vec.size(); i++){
    32             node_vec[i-1]->next = node_vec[i];
    33         }
    34         node_vec[node_vec.size()-1]->next = NULL;
    35         return node_vec[0];
    36     }
    37 };
    38 
    39 int main(){
    40     ListNode a(1);
    41     ListNode b(4);
    42     ListNode c(6);
    43     ListNode d(0);
    44     ListNode e(5);
    45     ListNode f(7);
    46     ListNode g(2);
    47     ListNode h(3);
    48     a.next = &b;
    49     b.next = &c;    
    50     d.next = &e;
    51     e.next = &f;    
    52     g.next = &h;    
    53     Solution solve;    
    54     std::vector<ListNode *> lists;
    55     lists.push_back(&a);
    56     lists.push_back(&d);
    57     lists.push_back(&g);    
    58     ListNode *head = solve.mergeKLists(lists);
    59     while(head){
    60         printf("%d
    ", head->val);
    61         head = head->next;
    62     }
    63     return 0;
    64 }

    通过~

  • 相关阅读:
    [译]HTML&CSS Lesson5: 定位
    Emscripten教程之入门指导
    html简单响应式滚动条置顶
    移动web开发问题和优化小结
    React+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
    ECMAScript中有两种属性:数据属性和访问器属性。
    css写作建议和性能优化小结
    validator API文档
    HBase概念学习(九)HTablePool为何弃用?
    leetcode -day 15 Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/Hwangzhiyoung/p/8641881.html
Copyright © 2011-2022 走看看