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

徐州市城乡建设局网站网络架构有几种模式

徐州市城乡建设局网站,网络架构有几种模式,做招聘网站需要做什么公司,hdwiki做网站Java-排序链表问题题目题解方法:自顶向下归并排序算法题目 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 示例 2: 示例 3: 提示: *链表中节点的数目在范围 [0, 5 * 104]…

Java-排序链表问题

  • 题目
  • 题解
    • 方法:自顶向下归并排序
  • 算法

题目

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
示例 1:
在这里插入图片描述
示例 2:
在这里插入图片描述
示例 3:
在这里插入图片描述
提示:

*链表中节点的数目在范围 [0, 5 * 104] 内
*-105 <= Node.val <= 105

进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

题解

方法:自顶向下归并排序

对链表自顶向下归并排序的过程如下。

      *找到链表的中点,以中点为分界,将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法,快指针每次移动 2 步,慢指针每次移动 1 步,当快指针到达链表末尾时,慢指针指向的链表节点即为链表的中点。*对两个子链表分别排序。*将两个排序后的子链表合并,得到完整的排序后的链表。可以使用「21. 合并两个有序链表」的做法,将两个有序的子链表进行合并。*上述过程可以通过递归实现。递归的终止条件是链表的节点个数小于或等于 1,即当链表为空或者链表只包含 1 个节点时,不需要对链表进行拆分和排序。

在这里插入图片描述
通过递归实现链表归并排序,有以下两个环节:
1.分割cut环节:找到当前链表中点,并从中点将链表断开(以便在下次递归cut时,链表片段拥有正确的边界);
(1)我们使用fast,slow快慢双指针法,奇数个结点找到中点,偶数个结点找到中心左边的结点。
(2)找到结点slow后,执行slow.next=None将链表切断。
(3)递归分割时,输入当前链表左端点head和中心结点slow的下一个结点tmp(因为链表是从slow切断的)。
(4)cut 递归终止条件:当head.nextNone时,说明只有一个结点,直接返回此结点。
2.合并merge环节:将两个排序链表合并,转化为一个排序链表。
(1)双指针法合并,建立辅助ListNode h作为头部。
(2)设置两指针left,right分别指向两链表头部,比较两指针处节点值的大小,由小到大加入合并链表头部,指针交替前进,直至添加完两个链表。
(3)返回辅助listNode h作为头部的下个结点h.next.
(4)时间复杂度O(1+r),l,r分别代表两个链表长度。
(5)当题目输入的head
None时,直接返回None.

算法

 *///归并排序链表:1.从中间节点处拆分链表   2.通过双指针合并链表
class Solution {public ListNode sortList(ListNode head) {return sortList(head, null);}public ListNode sortList(ListNode head, ListNode tail) {if (head == null) {return head;}if (head.next == tail) { //sortList区间:[head,tail),说明此时区间中只有head一个元素head.next = null;return head;}//找到当前区间的中间节点ListNode slow = head, fast = head;while (fast != tail) {slow = slow.next;fast = fast.next;if (fast != tail) {fast = fast.next;}}ListNode mid = slow;//递归的拆分、合并链表ListNode list1 = sortList(head, mid);//sortList区间:[head,tail)ListNode list2 = sortList(mid, tail);ListNode sorted = merge(list1, list2);return sorted;}//类似于双指针法合并链表public ListNode merge(ListNode head1, ListNode head2) {ListNode dummyHead = new ListNode(0);ListNode temp = dummyHead, temp1 = head1, temp2 = head2;while (temp1 != null && temp2 != null) {if (temp1.val <= temp2.val) {temp.next = temp1;temp1 = temp1.next;} else {temp.next = temp2;temp2 = temp2.next;}temp = temp.next;}if (temp1 != null) {temp.next = temp1;} else if (temp2 != null) {temp.next = temp2;}return dummyHead.next;}
}
}
http://www.yayakq.cn/news/382714/

相关文章:

  • 厦门做网站优化唐山官方网站建设
  • 企业如何做网站wordpress 产品展示
  • 新郑网站建设dede网站logo怎么改
  • 手机网站按那个尺寸做手机网站设计报价
  • 做网站 租服务器吗关键词排名怎么做上首页
  • 宁波网站建设公司比较好wordpress wshk
  • 门户建设网站多少钱有没有永久免费crm
  • 修改网站图标深圳网站开发设计公司排名
  • 网站定制哪个好网站页面类型
  • 哪儿能做网站建设淮北网站建设费用
  • 手机网站 模板做装修的网站有哪些
  • 爱站网长尾词挖掘工具哪些人不适合学计算机
  • vi毕业设计代做网站做网站推广有作用没
  • 免费建站网站大全网站可以自己做吗
  • 网站建设员工分工死循环网站
  • 网站平台建设意见电商网络推广是什么
  • 网络公司网站赏析人才招聘网站怎么做
  • 如何做社团网站网页微信版官网登录仅传输文件
  • 成都网站建设 赢展小型网站建设公司价格低
  • 青岛硅谷网站建设住小帮装修案例
  • 企业网站 dede phpcms 帝国织梦网站怎么加入引导页
  • 建设银行网站点不进去鞍山网站页设计制作
  • 哪些行业没有做网站网站建设合同定义
  • 英文网站建设哪家强网站建设中所涉及的所有链接建设
  • 网站建设带主机电脑上制作ppt的步骤
  • 房产抵押贷款seo做的最好的网站
  • 源码网站模板提供服务的网站
  • 网站网站怎么优化关键词排名wordpress社交链接设置
  • 揭阳网站免费建站宁至网站建设
  • 网站备案管理系统登录不上去上海app开发外包