leetcode 23. Merge k Sorted Lists

男娘i 2022-07-29 09:19 233阅读 0赞

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

思路:大家看到hard,以为肯定很难,有什么刁钻解法,苦思冥想,迟迟不敲代码。小爷我看到后直接的思路就是把所有链表里的节点装入vector,sort,连接然后完事,简单粗暴。你要问这也行?不管三七二十一,试了再说。

  1. struct mycomp
  2. { //自定义比较函数,重载“()”操作符
  3. bool operator() (const ListNode*a, const ListNode*b)
  4. {
  5. return a->val < b->val;
  6. }
  7. };
  8. class Solution {
  9. public:
  10. ListNode* mergeKLists(vector<ListNode*>& lists) {
  11. if (lists.empty())
  12. return NULL;
  13. vector<ListNode*>que;
  14. for (int i = 0; i < lists.size(); i++)
  15. {
  16. ListNode*node = lists[i];
  17. if (node != NULL)
  18. {
  19. que.push_back(node);
  20. while (node->next != NULL)
  21. {
  22. que.push_back(node->next);
  23. node = node->next;
  24. }
  25. }
  26. }
  27. if (!que.empty())
  28. {
  29. sort(que.begin(), que.end(), mycomp());
  30. for (int i = 0; i < que.size() - 1; i++)
  31. que[i]->next = que[i + 1];
  32. que.back()->next = NULL;
  33. return que.front();
  34. }
  35. return NULL;
  36. }
  37. };

结果accepted

所以有时不要把问题想的太复杂。

这个的复杂度取决于sort的复杂度,应该是O(nlog2n)。当然有追求的同学可以精益求精,探索更高效解法。

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读