zoukankan      html  css  js  c++  java
  • leetcode23 合并k个排序链表

    /**
     * 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) {
            // time O(nk) space O(1) k为lists宽度
            int len=lists.size();
            int flag=len;
            ListNode *ahead,*pre,*cur;
            pre=new ListNode(-1);ahead=pre;
            while(flag){
                cur=NULL;
                int k;//记录最小值的下标
                //循环取每个当前值的最小值,当前值的序列如果由lists[i]变成最小堆,那么可以优化time
                for(int i=0;i<len;i++){
                    if(cur==NULL){
                        cur=lists[i];k=i;
                    }else if(lists[i]!=NULL && cur->val>lists[i]->val){
                        cur=lists[i];k=i;
                    }
                }
                if(cur==NULL) break;//处理异常情况:当所有为空的时候
                pre->next=cur;
                pre=cur;
                if(lists[k]!=NULL) lists[k]=lists[k]->next;
                if(lists[k]==NULL) flag--;
            }
            return ahead->next;
        }
    };

  • 相关阅读:
    02-print的用法
    01-Hello World
    01-查看系统整体性能情况:sar
    03-购物车
    Python之路,Day2
    02-三级菜单
    Python之路,Day1
    loadrunner中配置java脚本环境
    算法
    实现testNg的retry机制
  • 原文地址:https://www.cnblogs.com/joelwang/p/11017091.html
Copyright © 2011-2022 走看看