博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leecode第二十三题(合并K个排序链表)
阅读量:4581 次
发布时间:2019-06-09

本文共 1751 字,大约阅读时间需要 5 分钟。

 

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        if(l1==NULL)//判断有一组为空的情况            return l2;        if(l2==NULL)            return l1;                if(l1->val>l2->val)//由于我设计的算法问题,需要明确知道第一个值谁小,不妨用l1小,若不满足,就倒一下            return mergeTwoLists(l2,l1);        ListNode* res=l1;//保存头指针,留待返回        while(l2!=NULL)        {            while(l1->next!=NULL && l1->next->val<=l2->val)//直到找出l1下一个比当前l2值大的数,且不能为空                l1=l1->next;            if(l1->next==NULL)//只要额外判断l1下个为空的情况,这个值肯定不会比l2大            {                l1->next=l2;                break;            }            ListNode* l2_next=l2->next;//一定要记住当前l2的下个节点            l2->next=l1->next;//这里一定要画图,特清晰,不画要崩溃            l1->next=l2;//注意这里l1指针停在新加入的节点处            l1=l1->next;            l2=l2_next;//即便l2为空也不要紧啊        }                return res;    }        ListNode* mergeKLists(vector
& lists) { int len=lists.size(); if(len==0)//提前写好三种情况,都是个数的最小单位了 return NULL; if(len==1) return lists[0]; if(len==2) return mergeTwoLists(lists[0],lists[1]); vector
list1(len/2+1);//然后分半,防止有奇数,所以下面是len-len/2-1长度 vector
list2(len-len/2-1); int i=0; for(;i

 

分析:

结合之前的写好的两个排序的思想,这个几乎没有阻碍就写出来了,但是明显写的慢,对vector没有python的切片这种都不太清晰,明显经验不足。

但是这个题给我提示,还是要画图,分析又快又好,关键是能验证你的想法能不能行。

而且,一个困难的问题,可以拆成多了小题解决,比如这个,分为递归归并策略和两个排序链表连接,特别有效果。

有点小开心的是时间击败了35%,哦对了,这个时间复杂度平均情况我有点不太清楚,但最坏情况是O(max(n)*m*log(m)),n是m个链表的长度。

 

转载于:https://www.cnblogs.com/CJT-blog/p/10584675.html

你可能感兴趣的文章
php header函数导出excel表格
查看>>
Jzoj1277最高的奶牛
查看>>
plsql中文乱码问题(显示问号)
查看>>
C# DataTbale详细操作
查看>>
用opencv检测人眼并定位瞳孔位置
查看>>
实现多项式的JAVA类
查看>>
Getting Started with the G1 Garbage Collector 转发
查看>>
HDU5036 Explosion(期望 bitset)
查看>>
有限自动机的构造和识别
查看>>
初试机器学习
查看>>
DNS的功能-域名空间、域名注册和域名解析
查看>>
Javascript模块化编程(三):require.js的用法(转)
查看>>
Git使用3(Git操作完整版)
查看>>
sql报错注入:extractvalue、updatexml报错原理
查看>>
C# this.Hide()
查看>>
sqlmap的学习之路-自动化测试SQL注入工具
查看>>
Java 内存管理、JVM 工作原理与 Java 运行时系统
查看>>
矩阵分解(matrix factorization)
查看>>
大型网站的架构设计与演进
查看>>
二值化函数
查看>>