算分作业3
来源:互联网 发布:淘宝漏洞q币充值系统 编辑:程序博客网 时间:2024/05/19 22:57
题目地址:https://leetcode.com/problems/merge-k-sorted-lists/?tab=Description
题目描述: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.size()==0) return NULL; while(lists.size()>1){ ListNode* a0=lists[0]; ListNode* a1=lists[1]; ListNode* a; if(a0==NULL||(a1!=NULL&&a0->val>a1->val)){ a=a0; a0=a1; a1=a; } a=a0; if(a0!=NULL) a0=a0->next; lists.push_back(a); while(a0!=NULL){ while(a1!=NULL&&a1->val<=a0->val){ a->next=a1; a=a->next; a1=a1->next; } a->next=a0; a=a->next; a0=a0->next; } if(a!=NULL) a->next=a1; lists[0]=NULL;lists[1]=NULL; lists.erase(lists.begin(),lists.begin()+2); } return lists[0]; }};
解题思路:
对于k个链表,将其两两分组,每次对[k+1]/2组做两个链表的合并即可。
由于使用的是vector,所以这一步就想当于每次将前两个链表合并后放到末尾。直到仅剩1个链表。
因为链表是有序的,所以可直接顺序比较将两个链表合并。
由于存在空链表的情况,所以需小心判断。
设最后链表元素个数为n个,由于链表数没减少一半,就需遍历所有的元素一次,因此复杂度为O(nlogk)。
0 0
- 算分作业3
- 第一次算分作业 分治法
- 以前关于分形作业
- 作业:C++作业3
- 作业:C++作业3
- 作业:C++作业3
- 3分
- sqlserver 作业每30分自动生成一次
- 作业:用switch语句来分考试成绩的等级
- C++补作业(分数)得了2个0分
- 作业3
- 作业3
- 作业3
- 作业3
- 作业3
- 作业3
- 作业3
- 作业3
- 怎样可以给pdf文件添加上页码
- P2731 骑马修栅栏
- POJ 2186(强连通分量 缩点)
- RAID 级别
- 算法训练 未名湖边的烦恼
- 算分作业3
- 浅谈JavaScript new对象的四个过程
- json 解析jsonArray
- webview中图片的获取、保存、展示、缓存处理
- jvm类加载过程
- 性能测试实施那些事
- 告警日志文件,查看控制文件,联机重做日志文件,数据文件和临时文件的名称跟大小
- 三方图表库hellocharts使用简单例子归纳(感觉比MpAndroidchart好用)
- FFT 【JSOI2012】bzoj4332 分零食