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

网站开发入门书籍推荐珠海网站建设推广厂商

网站开发入门书籍推荐,珠海网站建设推广厂商,东莞商城网站建设公司,宝安网站设计制作这道题我是用最淳朴最简单的思路去做的,用一个while循环持续地将当前遍历到的最小值加入到合并链表中,while循环中使用一个for循环遍历整个指针数组,将其中的最小值和对应下标记录下来,并将其值加入到合并链表中,同时对…


这道题我是用最淳朴最简单的思路去做的,用一个while循环持续地将当前遍历到的最小值加入到合并链表中,while循环中使用一个for循环遍历整个指针数组,将其中的最小值和对应下标记录下来,并将其值加入到合并链表中,同时对应的那条链表的指针后移一位。这里我们需要用到一个额外的辅助变量flag,在每一次执行for循环之前需要初始化为false,默认为所有链表都已经遍历到末尾,在for循环中,如果遇到了还没遍历到末尾的链表,则flag会被更新为true,该标志位的作用就是用来标记所有链表是否遍历结束,如果遍历结束就直接跳出外层的while循环。

/*** 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* mergeKLists(vector<ListNode*>& lists) {ListNode* result = new ListNode();ListNode* temp = result;bool flag = lists.size() == 0 ? false : true;while(flag){int min_value = INT_MAX;int min_index = INT_MAX;flag = false;for(int i = 0; i < lists.size(); ++i){if(!lists[i]){    //若当前遍历到的链表已经遍历到末尾,则直接跳过当前链表flag = false || flag;continue;   } flag = true;  //尚有链表没有遍历结束if(lists[i] -> val < min_value){min_value = lists[i] -> val;  //更新当前节点的最小值min_index = i;   //更新最小值的下标}}if(flag){temp -> next = new ListNode(min_value);cout << min_value << endl;temp = temp -> next;lists[min_index] = lists[min_index] -> next;}}return result -> next;}
};

但是这么做的耗时有点太长了,AC之后去看了下灵神的题解,感觉他的第一种思路特别通俗易懂,主要是借用了数据结构本身的特性,利用优先队列进行自动排序,而无需手动排序,因此我们只需要不断地将节点加入到优先队列中即可,这道题需要我们自定义一个排序规则,以对链表节点进行排序,当我们把优先队列的队头元素(队列内的最小值)取出后,我们需要判断队头元素的下一个节点是否为空,若不为空才将下一个节点加入到优先队列中。当所有链表的所有节点都被加入到优先队列中后,我们直接退出循环。

/*** 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* mergeKLists(vector<ListNode*>& lists) {ListNode* result = new ListNode();ListNode* temp = result;// 使用Lambda表达式定义比较规则auto compare = [] (const ListNode* a, const ListNode* b) {return a -> val > b -> val;    //较小的优先级较高};priority_queue<ListNode*, vector<ListNode*>, decltype(compare)> q;   //优先队列,存储值较小的排前面for(auto head : lists){if(head) q.push(head);  //将所有的非空链表头节点入队}while(!q.empty()){temp -> next = new ListNode(q.top() -> val);cout << q.top() -> val << endl;if(q.top() -> next)  //下个节点不为空才入队q.push(q.top() -> next);q.pop();temp = temp -> next;}return result -> next;}
};

文章转载自:

http://uJZT04PY.sjwzL.cn
http://QaKjjPy8.sjwzL.cn
http://HcRuJje7.sjwzL.cn
http://jF1n5b4e.sjwzL.cn
http://MSboO5pr.sjwzL.cn
http://48qsxtTp.sjwzL.cn
http://rWcMTD9o.sjwzL.cn
http://7wTsR3Od.sjwzL.cn
http://6vieqRj0.sjwzL.cn
http://IMuH7hHy.sjwzL.cn
http://VCvfFJfp.sjwzL.cn
http://XMTUNqrY.sjwzL.cn
http://51R9z3y8.sjwzL.cn
http://i0KtNxOp.sjwzL.cn
http://iQTtSbhd.sjwzL.cn
http://exJN1KOI.sjwzL.cn
http://cu5hifQG.sjwzL.cn
http://wG1BoXTY.sjwzL.cn
http://KtpARBM9.sjwzL.cn
http://rfq6lJOE.sjwzL.cn
http://QataZ41u.sjwzL.cn
http://Mk9SYfTB.sjwzL.cn
http://uq3YliGw.sjwzL.cn
http://6xLykA0u.sjwzL.cn
http://Ph0vQMGo.sjwzL.cn
http://8SwtnxVu.sjwzL.cn
http://r8eGw0Au.sjwzL.cn
http://VD0CUfac.sjwzL.cn
http://vFveEPFI.sjwzL.cn
http://zugjcZNM.sjwzL.cn
http://www.dtcms.com/wzjs/669089.html

相关文章:

  • 蓝气球卡地亚手表官方网站wordpress如何代码高亮
  • 菜篮网网站开发技术网站欢迎页制作
  • 网站网址注册哪个网站支持接单做网页的
  • 甘肃省集约化网站建设试点辽宁建设工程信息网如何投标
  • 哪里有免费的ppt模板下载网站网络营销外包公司哪家最好
  • 如何建立公司自己的网站天眼查询企业信息官网入口
  • 关于做营销型网站的建议沧州网站建设设计定制
  • 做结婚视频储存网站在哪里看片可以免费
  • 青岛网站排名提升用于建设教学网站的建站工具有哪些特点
  • 商城网站备案网络技术人员
  • 株洲网站建设 磐石网络网站前台做好以后用什么生成后台管理系统
  • 做企业网站可以没有后台吗海网站建设生产厂家哪家好
  • 做彩票网站非法吗seo网站优化培训多少价格
  • 个人可以建网站卖东西吗wordpress问答社区模板
  • 石家庄免费自助建站模板小型网站建设的经验
  • 滴滴优惠券网站怎么做的做行业网站投资多少
  • 翻书效果网站门户网站建设ppt方案
  • ui网站开发报价wordpress挂饰插件
  • 昌吉网站建设公司手机电影网站怎么做
  • 珠海网站建设 金碟wordpress 菜单样式
  • 福州百度网站排名优化西昌seo
  • wordpress 架站php房产网站开发教程
  • 建设银行网上银行网站可以开通网银wordpress站外链接
  • 网站内容怎么做备份义乌做网站公司哪家好
  • 哪个网站做的win10系统网站建设客户分析调查表
  • 手机网站字体自适应wordpress 微信内登录
  • 模板板网站沭阳做网站公司排名前十
  • 做甲基化黑点的网站网站域名可以更改吗
  • 西安网站建设公司哪有linux网站服务器配置
  • 网站接单兰州app定制