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

什么网站可以做线上邀请函中国建盏形象设计大赛获奖名单

什么网站可以做线上邀请函,中国建盏形象设计大赛获奖名单,中文网站域名,上哪里建设个人网站目录 合并 K 个升序链表 解题思路 ListNode 数组方式给出 k 个链表 ArrayList 方式给出 k 个链表 ArrayList常见操作 合并 K 个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后…

目录

合并 K 个升序链表 

解题思路 

ListNode 数组方式给出 k 个链表

ArrayList 方式给出 k 个链表 

ArrayList常见操作


合并 K 个升序链表 

题目描述

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1

输入:lists = [[1,4,5],[1,3,4],[2,6]]

输出:[1,1,2,3,4,4,5,6]

        有两种方式给出 k 个链表,一种是以 ListNode 数组的方式给出链表,另一种方式是以 List Node 顺序表的方式给出,本文以 合并 k 个升序链表为例,顺便复习 ArrayList

解题思路 

        对于 k 个有序链表的合并,其实就相当于对这 k 个链表首先两两进行合并,得到合并后的     k / 2个链表,之后继续对这 k / 2 的链表进行合并,得到 k / 4 个链表,对其以此类推一直进行合并,直到为数量为 1 为止,这个链表就是 k 个链表合并后的结果。 

        其关键在于:1、如何对两个链表进行合并,对于该问题可以在leetcode中练习:合并两个有序链表,在该题目中,我们将两个链表进行合并封装成一个函数;2、如何对 1 中的函数传参,这是每次传入哪两个链表,这里有两种方式:①一种是将相邻的两个链表传入,②另一种是每次传入最左边和最右边这两个链表。

ListNode 数组方式给出 k 个链表

        以下代码给出了两种传入两个链表的方式,第一种将相邻的两个链表传入借助 for 循环即可实现,第二种每次传入最左边和最右边这两个链表,借助双指针即可实现,具体见下列代码. 

    /*** 每次传入最左边和最右边的链表*/public ListNode mergeKLists(ListNode[] lists) {if (lists == null || lists.length == 0) {return null;}int len = lists.length;while (len > 1) {int index = 0;int left = 0;int right = len - 1;while (left < right) {lists[index++] = merge(lists[left], lists[right]);left++;right--;}if (left == right) {lists[index++] = lists[left];}len = index;}return lists[0];}/*** 每次将相邻的两个链表传入*/public ListNode mergeKLists(ListNode[] lists) {if (lists == null || lists.length == 0) {return null;}int len = lists.length;while (len > 1) {int index = 0;for (int i = 0; i < len; i += 2) {if (i == len - 1) {lists[index++] = lists[i];} else {lists[index++] = merge(lists[i], lists[i + 1]); }}len = index;}return lists[0];}private ListNode merge(ListNode head1, ListNode head2) {if (head1 == null || head2 == null) {return head1 == null ? head2 : head1;}ListNode newHead = new ListNode(-1); // 虚拟节点ListNode cur = newHead;while (head1 != null && head2 != null) {if (head1.val > head2.val) {cur.next = head2;head2 = head2.next;cur = cur.next;} else {cur.next = head1;head1 = head1.next;cur = cur.next;}}cur.next = head1 == null ? head2 : head1;return newHead.next;}

ArrayList 方式给出 k 个链表 

ArrayList常见操作

1. boolean add(E e)    // 尾插 e 

2. void add(int index, E e)  // 在 index 位置插入 e

3. E remove(int index)  // 删除 index 位置的元素

4. E get(int index)  // 获取 index 下标的元素

5. E set(int index, E e)  // 将 index 下标的值改为 e

6. void clear()  // 清空所有元素

7. boolean contains(Object o)  // 判断 o 是否在线性表中

8. int indexOf(Object o)  // 返回第一个 o 的下标

9. int lastIndexOf(Object o)  // 返回最后一个 o 的下标

        对于该题, 可以以 ArrayList 的方式传入要合并的链表, 实现思路与以数组方式传入链表一样,但需要熟悉 ArrayList 相关的操作,具体代码实现方式如下:

    /*** 每次传入最左边和最右边的链表*/public static ListNode mergeKLists(ArrayList<ListNode> lists) {if (lists == null || lists.size() == 0) {return null;}int len = lists.size();while (len > 1) {int index = 0;int left = 0;int right = len - 1;while (left < right) {lists.set(index++, merge(lists.get(left), lists.get(right)));left++;right--;}if (left == right) {lists.set(index++, lists.get(left));}len = index;}return lists.get(0);}/*** 每次将相邻的两个链表传入*/public static ListNode mergeKLists2(ArrayList<ListNode> lists) {if (lists == null || lists.size() == 0) {return null;}int len = lists.size();while (len > 1) {int index = 0;for (int i = 0; i < len; i += 2) {if (i == len - 1) {lists.set(index++, lists.get(i));} else {lists.set(index++, merge(lists.get(i), lists.get(i + 1)));}}len = index;}return lists.get(0);}private static ListNode merge(ListNode head1, ListNode head2) {if (head1 == null || head2 == null) {return head1 == null ? head2 : head1;}ListNode newHead = new ListNode(-1); // 虚拟节点ListNode cur = newHead;while (head1 != null && head2 != null) {if (head1.val > head2.val) {cur.next = head2;head2 = head2.next;cur = cur.next;} else {cur.next = head1;head1 = head1.next;cur = cur.next;}}cur.next = head1 == null ? head2 : head1;return newHead.next;}

 

 


文章转载自:

http://H9EhV6sM.yfzLd.cn
http://qMzGlfHF.yfzLd.cn
http://KKewWwUE.yfzLd.cn
http://3ImB9lKl.yfzLd.cn
http://EhgdGfK4.yfzLd.cn
http://DGsP57Ci.yfzLd.cn
http://HRtB6MMY.yfzLd.cn
http://dEiaYifG.yfzLd.cn
http://Njgflej1.yfzLd.cn
http://EX3IIHTi.yfzLd.cn
http://B9Av9S58.yfzLd.cn
http://t9KM3iCG.yfzLd.cn
http://fILyxcdv.yfzLd.cn
http://TzPtxlPd.yfzLd.cn
http://jiiHHe2Q.yfzLd.cn
http://pPpIVYJ4.yfzLd.cn
http://4s0DqLWy.yfzLd.cn
http://ZfWSR1jL.yfzLd.cn
http://LQELubUd.yfzLd.cn
http://JfebF3NC.yfzLd.cn
http://oLNiMWl8.yfzLd.cn
http://jlPHe17R.yfzLd.cn
http://pNs8fgaw.yfzLd.cn
http://n7cVrEdw.yfzLd.cn
http://VdubdCJC.yfzLd.cn
http://pEb0zLOl.yfzLd.cn
http://WY1BD4dk.yfzLd.cn
http://JQeQETCK.yfzLd.cn
http://AymM1vLu.yfzLd.cn
http://tRZuwLUC.yfzLd.cn
http://www.dtcms.com/wzjs/674899.html

相关文章:

  • 山东网站开发网站建设毕业设计开题报告
  • 做网站找个人wordpress首页显示栏目分类
  • 微信表情包制作网站五个常见的电子商务网站
  • 长沙制作网站信用中国 网站有那个部门支持建设
  • wordpress 使用教程优化大师兑换码
  • 如何查询网站开发免费建网站哪家好
  • 拍卖网站制作表格网站怎么做的
  • 个人能备案多少个网站哈尔滨 做网站公司
  • 辽宁建设工程信息网官方网站网站做跳转的意义
  • 中山建设网站官网福州
  • 建网站哪家划算福建省建设集团有限公司官网
  • 青州网站搭建微网站开发腾讯
  • 免费发布推广信息电影网站如何做seo
  • 怎么建立网站文件夹广州市企业网站建设平台
  • 做网站后期费用做信息网站要办icp证吗
  • 丽水做网站企业网页多少钱
  • 潍坊做网站价格可以做淘宝推广的网站
  • 网站做销售是斤么工作深圳网站建设全包
  • 找设计师做网站seo入门教程网盘
  • 设计做网站哪家公司好济南的互联网公司
  • 江苏大才建设集团网站全景网互动平台
  • 做外贸推广的网站有哪些开发软件的工具
  • 微信分享接口网站开发免费私人网站建设软件
  • 福州网站设计哪家做的好二维码在线生成制作
  • 网站建设考题凯里网站开发gzklyy
  • 织梦网站上传步骤电子杂志网站建设
  • 云服务器上放多个网站沈阳大型网站制作公司
  • 自适应型网站建设玉山县住房城乡建设局网站
  • 网站建设用什么软件好东莞网站建设兼职
  • 收录网站有哪些合肥网站建设费用