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

郑州企业网站排行wordpress表情文件夹

郑州企业网站排行,wordpress表情文件夹,wordpress本地搬家,新闻今天文章目录 一、前言二、最小堆解法三、分治解法 一、前言 23. 合并 K 个升序链表 本题的要求是把K个链表进行合并#xff0c;合并后的链表必须是从小到大的。 并且这K个链表也是从小到大的升序链表。 二、最小堆解法 既然每个链表都是升序的#xff0c;也就是从小到大的。 … 文章目录 一、前言二、最小堆解法三、分治解法 一、前言 23. 合并 K 个升序链表 本题的要求是把K个链表进行合并合并后的链表必须是从小到大的。 并且这K个链表也是从小到大的升序链表。 二、最小堆解法 既然每个链表都是升序的也就是从小到大的。 那么最后合并出来的链表的第一个节点也肯定是K个链表的某个链表记做first链表第一个节点的其中一个。 合并之后的第二个节点可以是其余链表的第一个节点或是first链表的第二个节点。 抓住这个规律我们只需要每次收集每个链表的第一个节点然后进行排序取最小那个节点进行合并即可。 如果某个链表的第一个节点已经合并了那么取第二个。如果第二个也合并了那么取第三个。以此类推 这里的话就可以考虑使用最小堆来完成这个排序工作只需要把节点入堆然后弹出堆中的最小堆即可。 思路如下 初始化堆将K个链表的第一个节点入堆不断弹出最小堆直到堆为空为止 对弹出的节点进行合并如果弹出节点的next不为空继续将节点的next入堆 public ListNode mergeKLists(ListNode[] lists) {PriorityQueueListNode queue new PriorityQueue((o1, o2) - o1.val - o2.val);for (ListNode head : lists) {if (head ! null){queue.add(head);}}ListNode head new ListNode();ListNode p0 head;while (!queue.isEmpty()){ListNode node queue.poll();p0.next node;p0 p0.next;if (node.next ! null){queue.add(node.next);}}return head.next; }时间复杂度 O(nlog⁡k)其中n为链表总数k为链表的数量。前面初始化堆的时间复杂度为O(k)合并链表的时候从堆中取出最小堆的时间复杂度O(logk)链表总数为n链表的所有节点都会放进堆中因此从堆中取最小堆这个操作需要执行n次因此时间复杂度为O(nlog⁡k)空间复杂度O(k)堆中最多存放k个元素。 三、分治解法 分治的思路就是将一个问题拆分成多个子问题最后将所有子问题进行合并从而解决问题。 于是我们可以将k个链表分成两个部分分别为前半部分链表和后半部分链表先分别对前半部分链表和后半部分链表进行合并成两个升序的链表然后对升序的两个链表进行合并。 要对前半部分链表和后半部分链表分别合并成两个升序链表可以继续对这两部分链表进行拆分一分为二直到只有一个链表那就不需要合并了。 因此需要用递归了解决问题 public ListNode mergeKLists(ListNode[] lists) {return mergeKLists(lists, 0, lists.length); }private ListNode mergeKLists(ListNode[] lists, int i, int j) {int m j - i;if (m 0) {return null;}if (m 1) {return lists[i];}ListNode left mergeKLists(lists, i, i m / 2);ListNode right mergeKLists(lists, i m / 2, j);return mergeKTwoLists(left, right); }private ListNode mergeKTwoLists(ListNode left, ListNode right) {ListNode head new ListNode(-1, null);ListNode p0 head;while (left ! null right ! null) {if (left.val right.val) {p0.next right;right right.next;} else {p0.next left;left left.next;}p0 p0.next;}if (left ! null){p0.next left;}if (right ! null){p0.next right;}return head.next; }时间复杂度O(nlogk)。n为链表总数k为链表数量。分治的时间复杂度为O(logk)每个节点都要参与一次合并那么就是O(nlogk).空间复杂度O(logk)。递归深度为 O(logk)需要用到 O(logk) 的栈空间。
http://www.dnsts.com.cn/news/82064.html

相关文章:

  • win7 asp.net 网站发布多个网站备案负责人
  • 如何找做网站的客户做网站上传图片一直错误
  • 苏州市住房和建设局网站微信网站怎么制作
  • 淘宝客如何做返积分制网站超市网站源码
  • 网站仿站建设wordpress 文章显示全文
  • 学校网站模板html淄博网站建设0533cl
  • 查一下红之易道学做的什么网站如何设置wordpress永久链接
  • 做水果生意去那个网站开公司 专做网站
  • 如何建好一个网站电商运营团队结构图
  • 合肥做网站的公网业黑色
  • 夜晚很晚视频免费素材网站换模板搭建网站怎么做
  • 软件网站开发团队名称微信系统平台开发
  • 桂林网站开发智能建站系统cms
  • 北京市环境建设办公室网站在家给别人做网站合法吗
  • 建网站要学哪些软件网站 尺寸
  • 什么情况自己建设网站郑州制作网站的基本流程
  • 个人网站模板html5谈谈对网站开发的理解
  • 任务平台网站建设潍坊网站关键词
  • 织梦 更换网站图标上海网站编辑招聘
  • 什么网站可以做进出口买卖wordpress萨隆破解版
  • 做杂志的网站有哪些网络营销推广的目标
  • 网站登录验证码不正确嘉兴网站免费制作
  • 做网站敲代码的图片做网站需要哪些费用
  • 永州企业网站建设价格宁乡网站开发公司推荐
  • 网站建设是什么科目网站建设demo
  • 网站优化托管方案文库淘宝网站建设流程
  • 云建站模板最专业的医疗网站建设
  • 礼仪策划网站建设网站主办者
  • 交互型网站开发网站做动态还是静态
  • 网站建设灬金手指下拉十四免费自己建立网站