[leetcode]23. Merge k Sorted Lists

23. Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Example:

Input:
[
  1->4->5,
  1->3->4,
  2->6
]
Output: 1->1->2->3->4->4->5->6

我比较蠢,第一反应就是暴力。。。于是就暴力去过了。。

思路就是把所有链表元素都放进数组,然后使用快速排序,最后重新建立链表返回头指针就OK了。。。

emm由于C++<algorithm>头文件里面有sort函数,这用的是快速排序,直接用就行了,时间复杂度也比较小。

提交的时候错了好几次。。由于忘了处理空列表,以及列表里面有空链表的情况。。

后面用一个flag处理成功了。。。

具体代码如下:

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if(lists.empty())
            return NULL;
		vector<int>list_to_array;
        
        bool flag = false;
		for (int i = 0; i < lists.size(); i++) {
            if(lists[i] == NULL)
                continue;
            else
                flag = true;
			ListNode *temp = lists[i];
			while (temp != NULL) {
				list_to_array.push_back(temp->val);
				temp = temp->next;
			}
		}
        
        if(flag == false)
            return NULL;
        
		int *answer_array = new int[list_to_array.size()];
        for(int i = 0;i < list_to_array.size();i++){
            answer_array[i] = list_to_array[i];
        }
        
		sort(answer_array, answer_array + list_to_array.size());

		ListNode* move;
		ListNode *head;
		ListNode *temp = new ListNode(0);
		move = temp;
		head = temp;
		move->val = answer_array[0];
		for (int i = 1; i < list_to_array.size();i++) {
			ListNode *temp1 = new ListNode(0);
			move->next = temp1;
			move->next->val = answer_array[i];
			move = move->next;
		}

		return head;
	}
};

后面看了看Leetcode solution里面看看有没有其他解法。。毕竟暴力嘛。。。emmm

看到了一种算法就是逐个比较,由于这些链表是实现排好序的,可以从每一个链表的第一个元素开始比,然后把最小的放进新链表,然后该链表就向后推移,这样也是一个很好的思路。还有一种思路好像是用的优先队列,我认为也是不错的思路。。不过还没认真看。。

结果发现我这暴力解法实在是有点低级2333。。不过好歹是过了就行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值