LeetCode 23:Merge k Sorted Lists 解题与思考
来源:互联网 发布:淘宝店铺装修视频 编辑:程序博客网 时间:2024/05/19 15:40
LeetCode 23:Merge k Sorted Lists 解题与思考
[原题链接]
题目描述
将若干个有序数列合并成一个,简单点说就是归并排序的第二步
思路
很显然,只需要对所有数列的头部进行遍历,每遍历一次取出最值就好。
当然,作为通过率较低的hard题目,其需要考虑的情况也不少。
我最先想到的是需要判断数列顺序的升降序,结果没能ac,因为leetcode还特别喜欢测试空数组的情况。不过只要好好考虑了这些情况,剩下的就很好办了。
算法
1、先判断数列空的情况
2、倘若数列不为空,则寻找至少两个或以上数字的数列,判断升降序
3、依次遍历每个数组的头部,找到最大(小)值输出。
代码
#include <iostream>#include <vector>using namespace std;class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { ListNode* result = NULL, *current; if ( lists.size() == 0 )return result; int nowVal, nowPos; bool decending; for ( auto i : lists ) { if ( i != NULL && i->next != NULL ) { if ( i->val > i->next->val ) { decending = true; break; } if ( i->val < i->next->val ) { decending = false; break; } } } if ( decending ) { nowVal = -100000; nowPos = -1; int pos = 0; for ( auto i : lists ) { if ( (i != NULL) && (i->val > nowVal) ) { nowVal = i->val; nowPos = pos; } pos++; } if ( nowPos == -1 )return result; result = lists.at(nowPos); lists.at(nowPos) = lists.at(nowPos)->next; current = result; while ( true ) { nowVal = -100000; nowPos = -1; int pos = 0; for ( auto i : lists ) { if ( (i != NULL) && (i->val > nowVal) ) { nowVal = i->val; nowPos = pos; } pos++; } if ( nowPos == -1 )return result; current->next = lists.at(nowPos); lists.at(nowPos) = lists.at(nowPos)->next; current = current->next; } } else { nowVal = 100000; nowPos = -1; int pos = 0; for ( auto i : lists ) { if ( (i != NULL) && (i->val < nowVal) ) { nowVal = i->val; nowPos = pos; } pos++; } if ( nowPos == -1 )return result; result = lists.at(nowPos); lists.at(nowPos) = lists.at(nowPos)->next; current = result; while ( true ) { nowVal = 100000; nowPos = -1; int pos = 0; for ( auto i : lists ) { if ( (i != NULL) && (i->val < nowVal) ) { nowVal = i->val; nowPos = pos; } pos++; } if ( nowPos == -1 )return result; current->next = lists.at(nowPos); lists.at(nowPos) = lists.at(nowPos)->next; current = current->next; } } return result; }};
思考
还是稍微有点懒了,很多代码部分没有做优化,部分地方复制粘贴,其实代码可以更省些的。不过反正题目也不难,所以也不打算花太多时间在上面了。
leetcode真的是喜欢空输入这个极端状况啊,只要有机会就会弄个这个玩意儿卡一下你,有点伤脑筋。
阅读全文
0 0
- LeetCode 23:Merge k Sorted Lists 解题与思考
- LeetCode Merge k Sorted Lists 解题报告
- 【LeetCode】Merge k Sorted Lists 解题报告
- LeetCode解题报告--Merge k Sorted Lists
- [LeetCode] Merge k Sorted Lists 解题报告
- [LeetCode] Merge k Sorted Lists 解题报告
- LeetCode(23)Merge K Sorted Lists
- [leetcode 23] Merge k Sorted Lists
- [leetcode]23 Merge k Sorted Lists
- [#23 leetcode]Merge k Sorted Lists
- LeetCode 23 Merge k Sorted Lists
- leetcode 23 Merge k Sorted Lists
- [Leetcode 23, Hard] Merge k Sorted Lists
- Leetcode 23 Merge k Sorted Lists
- LeetCode 23 - Merge k Sorted Lists
- LeetCode 23: Merge K Sorted Lists
- leetcode-23Merge k Sorted Lists
- leetcode 23: Merge k Sorted Lists
- 标准库类型string
- 17ICPC南宁 G I 计算几何+暴力
- case/casez/casex
- 使用Python3将manifest.xml转为excel供查看
- Android Studio-Didn't find class XXX on path: DexPathList [zip file "/data/app/packagename/base.apk]
- LeetCode 23:Merge k Sorted Lists 解题与思考
- 西瓜书读书笔记(一)
- 阿里云centos7 下安装svn服务器教程笔记
- day11-jQuery事件
- linux 内核驱动--Platform Device和Platform_driver注册过程
- 高级C语言教程
- JS类型转换
- scrapy爬虫框架入门实例-2017年9月抓取慕课网‘课程标题’,‘课程url’,‘课程标题图片’等
- java设计模式之适配器模式