当前位置: 首页 > news >正文

专业做邯郸网站优化重庆seo入门教程

专业做邯郸网站优化,重庆seo入门教程,wordpress指定ip登陆,个人网站源代码html23. 合并K个排序链表 - 力扣(LeetCode) 抓住链表本身有序这个特点。 我们知道链表排序的主流算法是归并排序,而这题链表本身就有序,自然会联想到归并排序的merge函数:链表排序总结(全)&#…

23. 合并K个排序链表 - 力扣(LeetCode)
在这里插入图片描述

抓住链表本身有序这个特点。

我们知道链表排序的主流算法是归并排序,而这题链表本身就有序,自然会联想到归并排序的merge函数:链表排序总结(全)(C++)_qq_32523711的博客-CSDN博客_链表排序 c++

分治

我们可以使用分治的思路进行合并,第一次两两合并,第二次将合并的结果继续两两合并,依次合并下去:

//ListNode *dummy = new ListNode(0);
//auto h = dummy;
ListNode dummy, *h = &dummy;
class Solution {
public:ListNode* mergeTwo(ListNode* left, ListNode* right){if(!left || !right) return left ? left : right;ListNode dummy, *h = &dummy;while(left && right){if(left->val < right->val){h->next = left;left = left->next;}else{h->next = right;right = right->next;}h = h->next;}h->next = left ? left : right;return dummy.next;}ListNode* merge(vector<ListNode*>& lists, int low, int high){if(low == high)  return lists[low];auto mid = (low+high)>>1;ListNode *left = merge(lists, low, mid);ListNode *right = merge(lists, mid+1, high);return mergeTwo(left, right);}ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.size() == 0)   return NULL;return merge(lists, 0, lists.size() - 1);}
};

之前也说过,归并排序还可以用迭代的思路来写:

class Solution {
public:ListNode* mergeTwo(ListNode* left, ListNode* right){ListNode dummy, *h = &dummy;while(left && right){if(left->val < right->val){h->next = left;left = left->next;}else{h->next = right;right = right->next;}h = h->next;}h->next = left ? left : right;return dummy.next;}ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.size() == 0)   return NULL;for(int i = 1; i < lists.size(); i += i){//即便size为奇数也无所谓,因为前面的一直合并下去总会合并为一个//将剩余的那个与合并的一大个再合并就行//或者在vector末尾加一个空链表让其size变成偶数也行for(int j = 0; j+i < lists.size(); j += 2*i){lists[j] = mergeTwo(lists[j], lists[j+i]);lists[j+i] = NULL;//已经合并到上面去了,所以这一部分可以置空}}return lists[0];}
};

merge函数可以直接使用引用传递:

class Solution {
public:void mergeTwo(ListNode* &left, ListNode* &right){ListNode dummy, *h = &dummy;while(left && right){if(left->val < right->val){h->next = left;left = left->next;}else{h->next = right;right = right->next;}h = h->next;}h->next = left ? left : right;left = dummy.next; //合并完之后放回left的位置,即vector中的原位置}ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.size() == 0)   return NULL;for(int i = 1; i < lists.size(); i += i){for(int j = 0; j+i < lists.size(); j += 2*i)mergeTwo(lists[j], lists[j+i]);}return lists[0];}
};

可以看这个的图:
C++ 优先队列&两两合并&分治合并(图解) - 合并K个排序链表 - 力扣(LeetCode)

使用小顶堆来排序,注意比较符号需要自己定义,k路归并:

class Solution {
public:struct cmp{  bool operator() (ListNode *a,ListNode *b){return a->val > b->val;}};ListNode* mergeKLists(vector<ListNode*>& lists) {priority_queue<ListNode*, vector<ListNode*>, cmp> q;for(auto p : lists){if(p)   q.push(p); //空链表就不放进去} ListNode dummy, *h = &dummy;while(!q.empty()){auto cur = q.top();q.pop();if(cur->next)   q.push(cur->next);h->next = cur;h = cur;}return dummy.next;}
};
http://www.lbrq.cn/news/2642023.html

相关文章:

  • 龙凤网站建设云聚达营销策略分析论文
  • 石河子网站制作承德网络推广
  • 免费微信建站有哪些网站文山seo
  • 中华室内设计网公众号下载seo优化员
  • 马鞍山做网站公司淘宝指数网站
  • 农产品销售网站建设方案百度seo优化怎么做
  • 做视频解析网站是犯法的么百度网站优化
  • 成都建好的网站出租手机百度ai入口
  • 公司企业网站源码手机注册网站
  • 安居客官网网站站长工具 忘忧草
  • 主题网络图卡通设计幼儿园百度seo公司哪家好一点
  • 有哪些好的网站制作公司全网推广平台
  • 鸡西网站制作广东疫情最新资讯
  • 山东网站建设工作室网站外链发布平台
  • web前端和前端开发的区别seo基础入门免费教程
  • 开封市建设教育协会网站北京搜索优化推广公司
  • 徐州网站排名系统企业推广策划书
  • 谁有做网站比较厉害的营销软文的范文
  • 贵州做网站kuhugz如何进行网络推广
  • 现在的报税网站怎么做更正申报百度seo关键词报价
  • 做网站 科目网络平台有哪些?
  • 做网站除了有服务器还需要什么问题网上竞价
  • 社保网站做的真烂日照网络推广公司
  • 网站运营培训班电子商务是干什么的
  • 学做静态网站如何创建网页链接
  • 竞争者网站建设情况新闻稿发布
  • 桂林网站建设公司为企业推广
  • 百度建立企业网站建设的目的驾校推广网络营销方案
  • 网站你懂我意思正能量晚上在线观看不用下载免费魅族seo如何提升排名收录
  • 媒体发稿网站开发seo分析工具
  • 10.final, finally, finalize的区别
  • 2022 RoboCom 世界机器人开发者大赛-本科组(国赛)
  • 5. 缓存-Redis
  • 宝龙地产债务化解解决方案一:基于资产代币化与轻资产转型的战略重构
  • Linux 学习 ------Linux 入门(上)
  • 如何在NVIDIA H100 GPU上用Ollama以最高性能运行大语言模型