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

优质手机网站建设企业外链购买平台

优质手机网站建设企业,外链购买平台,医院电子网站建设,做盈利的设计素材网站有前途23. 合并 K 个升序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-k-sorted-lists/?envTypestudy-plan-v2&envIdtop-100-liked 顺序合并 合并两个有序链表作为子函数,创建一个空链表,然后对含有多个链表的数组进…

23. 合并 K 个升序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-k-sorted-lists/?envType=study-plan-v2&envId=top-100-liked

顺序合并

合并两个有序链表作为子函数,创建一个空链表,然后对含有多个链表的数组进行遍历,不断合并空链表与当前链表得到新链表直到遍历完毕。

//c++
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mtwo(ListNode* h1,ListNode* h2){if((!h1)||(!h2))    return h1?h1:h2;ListNode* ans=new ListNode(0),*pre=ans,*t1=h1,*t2=h2;while(t1&&t2){if(t1->val<t2->val){pre->next=t1;t1=t1->next;}else{pre->next=t2;t2=t2->next;}pre=pre->next;}pre->next=t1?t1:t2;return ans->next;}ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode* ans=nullptr;for(int i=0;i<lists.size();i++)    ans=mtwo(ans,lists[i]);return ans;}
};#python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mtwo(self, a:ListNode,b:ListNode)->ListNode:if not a or not b:return a if a else bh=t=ListNode()aa,bb=a,bwhile aa and bb:if aa.val>bb.val:t.next=bbbb=bb.nextelse:t.next=aaaa=aa.nextt=t.nextt.next=aa if aa else bbreturn h.nextdef mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:ans=Nonefor i in lists:ans=self.mtwo(ans,i)return ans

分治合并

合并两个有序链表作为子函数,对含有多个链表的数组进行不断的二分递归,直到只含一个链表在回溯到上一个递归进行合并两个有序链表的操作直到回溯到对整个链表数组的合并。

//c++
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mtwo(ListNode* h1,ListNode* h2){if((!h1)||(!h2))    return h1?h1:h2;ListNode* ans=new ListNode(0),*pre=ans,*t1=h1,*t2=h2;while(t1&&t2){if(t1->val<t2->val){pre->next=t1;t1=t1->next;}else{pre->next=t2;t2=t2->next;}pre=pre->next;}pre->next=t1?t1:t2;return ans->next;}ListNode* fen(vector <ListNode*> &a,int b,int c){if(b==c)    return a[b];if(b>c)    return nullptr;int m=(b+c)>>1;return mtwo(fen(a,b,m),fen(a,m+1,c));}ListNode* mergeKLists(vector<ListNode*>& lists) {return fen(lists,0,lists.size()-1);}
};#python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mtwo(self, a:ListNode,b:ListNode)->ListNode:if not a or not b:return a if a else bh=t=ListNode()aa,bb=a,bwhile aa and bb:if aa.val>bb.val:t.next=bbbb=bb.nextelse:t.next=aaaa=aa.nextt=t.nextt.next=aa if aa else bbreturn h.nextdef fen(self,a:List[Optional[ListNode]],b:int,c:int):if b==c:return a[b]if b>c:return Nonem=(b+c)>>1return self.mtwo(self.fen(a,b,m),self.fen(a,m+1,c))def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:return self.fen(lists,0,len(lists)-1)

优先队列合并

c++应用结构体创造最小堆的优先队列,python用库函数heapq。对多个链表的数组的多个链表的第一个元素进行堆的初始化,然后不断取堆顶,并将堆顶的下一个元素入堆,直到堆为空。

//c++
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:struct a{int val;ListNode* aa;bool operator<(const a &others) const{   return val>others.val;    }};priority_queue <a> q;ListNode* mergeKLists(vector<ListNode*>& lists) {for(auto i:lists)   if(i)   q.push({i->val,i});ListNode ans,*pre=&ans;while(!q.empty()){auto i=q.top();q.pop();pre->next=i.aa;pre=pre->next;if(i.aa->next)  q.push({i.aa->next->val,i.aa->next});}return ans.next;}
};#python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:import heapqq=[]for i,j in enumerate(lists):if j:heapq.heappush(q,(j.val,i,j))ans=pre=ListNode(0)while q:i,j,k=heapq.heappop(q)pre.next=k pre=pre.nextif k.next:heapq.heappush(q,(k.next.val,j,k.next))return ans.next

http://www.dtcms.com/wzjs/17716.html

相关文章:

  • 郑州最好网站制作公司优化大师有必要花钱吗
  • 网站建设所需的硬件设备免费推广网站大全下载安装
  • 广州微网站建设信息网站制作费用
  • 推销产品什么网站好网络安全有名的培训学校
  • php 网站备份代码营销传播
  • 网页游戏广告平台网站建设企业管理培训免费课程
  • 网站添加cms搜狗网站收录入口
  • 建站平台 discuz线上线下推广方案
  • 网站默认首页怎么做专业关键词优化平台
  • 如何学习网站建设重庆seo的薪酬水平
  • 怎么做监控直播网站抖音推广
  • 网站建设的重要性 学校推广一手渠道
  • 中国b2b网站有哪些链爱生态怎么交易
  • 网站建设公司怎么开电商平台推广公司
  • 用asp做网站遇到的问题网络安全培训机构排名
  • 中组部 两学一做 网站怎样注册个人网站
  • 淄博网站优化推广google国外入口
  • 网站专题二级页怎么做百度小说排行榜第一名
  • 湖南网站设计成人技能培训
  • 做色流网站在哪买广东省最新新闻
  • 做本地网站赚钱吗全国分站seo
  • 台州卫浴网站建设百度公司高管排名
  • 公司网站续费帐怎么做优化大师下载旧版本安装
  • seo推广灰色词安卓优化大师最新版
  • 金融产品做网站推广百度知道首页登录
  • 淄博政府网站建设托管qq空间秒赞秒评网站推广
  • 一般通过山女是什么梗优化合作平台
  • 阜沙网站建设自动seo系统
  • 日本网站风格宁波seo关键词优化
  • 阿里云服务器的网站备案流程图b站新人视频怎么推广