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

学习做网页的网站互联网站建设用法

学习做网页的网站,互联网站建设用法,godaddy如何上传网站,江门微信网站建设题目 给你链表的头结点 head #xff0c;请将其按升序排列并返回排序后的链表 。 示例 1#xff1a; 输入#xff1a;head [4,2,1,3] 输出#xff1a;[1,2,3,4] 示例 2#xff1a; 输入#xff1a;head [-1,5,3,4,0] 输出#xff1a;[-1,0,3,4,5] 示例 3#xff…题目 给你链表的头结点 head 请将其按升序排列并返回排序后的链表 。 示例 1 输入head [4,2,1,3] 输出[1,2,3,4] 示例 2 输入head [-1,5,3,4,0] 输出[-1,0,3,4,5] 示例 3 输入head [] 输出[] 提示 链表中节点的数目在范围 [0, 5 * 10 ^ 4] 内     -10 ^ 5 Node.val 10 ^ 5 进阶你可以在 O(n log n) 时间复杂度和常数级空间复杂度下对链表进行排序吗 「147. 对链表进行插入排序」要求使用插入排序的方法对链表进行排序插入排序的时间复杂度是 O(n^2)其中 nn 是链表的长度。这道题考虑时间复杂度更低的排序算法。题目的进阶问题要求达到 O(nlog⁡n) 的时间复杂度和 O(1) 的空间复杂度时间复杂度是 O(nlog⁡n) 的排序算法包括归并排序、堆排序和快速排序快速排序的最差时间复杂度是 O(n ^ 2)其中最适合链表的排序算法是归并排序。 归并排序基于分治算法。最容易想到的实现方式是自顶向下的递归实现考虑到递归调用的栈空间自顶向下归并排序的空间复杂度是 O(log⁡n)。如果要达到 O(1) 的空间复杂度则需要使用自底向上的实现方式。 思路1自顶向下归并排序 对链表自顶向下归并排序的过程如下。 找到链表的中点以中点为分界将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法快指针每次移动 22 步慢指针每次移动 11 步当快指针到达链表末尾时慢指针指向的链表节点即为链表的中点。对两个子链表分别排序。将两个排序后的子链表合并得到完整的排序后的链表。可以使用「21. 合并两个有序链表」的做法将两个有序的子链表进行并。 上述过程可以通过递归实现。递归的终止条件是链表的节点个数小于或等于 11即当链表为空或者链表只包含 11 个节点时不需要对链表进行拆分和排序。 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) {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);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;} } 复杂度分析 时间复杂度O(nlog⁡n)其中 n 是链表的长度。空间复杂度O(log⁡n)其中 n 是链表的长度。空间复杂度主要取决于递归调用的栈空间。 思路2自底向上归并排序 使用自底向上的方法实现归并排序则可以达到 O(1) 的空间复杂度。 首先求得链表的长度 length然后将链表拆分成子链表进行合并。 具体做法如下。 用 subLength 表示每次需要排序的子链表的长度初始时 subLength1。每次将链表拆分成若干个长度为 subLength 的子链表最后一个子链表的长度可以小于 subLength按照每两个子链表一组进行合并合并后即可得到若干个长度为 subLength×2 的有序子链表最后一个子链表的长度可以小于 subLength×2。合并两个子链表仍然使用「21. 合并两个有序链表」的做法。将 subLength 的值加倍重复第 2 步对更长的有序子链表进行合并操作直到有序子链表的长度大于或等于 length整个链表排序完毕。 如何保证每次合并之后得到的子链表都是有序的呢可以通过数学归纳法证明。 初始时 subLength1每个长度为 1 的子链表都是有序的。如果每个长度为 subLength 的子链表已经有序合并两个长度为 subLength 的有序子链表得到长度为 subLength×2 的子链表一定也是有序的。当最后一个子链表的长度小于 subLength 时该子链表也是有序的合并两个有序子链表之后得到的子链表一定也是有序的。 因此可以保证最后得到的链表是有序的。 class Solution {public ListNode sortList(ListNode head) {if (head null) {return head;}int length 0;ListNode node head;while (node ! null) {length;node node.next;}ListNode dummyHead new ListNode(0, head);for (int subLength 1; subLength length; subLength 1) {ListNode prev dummyHead, curr dummyHead.next;while (curr ! null) {ListNode head1 curr;for (int i 1; i subLength curr.next ! null; i) {curr curr.next;}ListNode head2 curr.next;curr.next null;curr head2;for (int i 1; i subLength curr ! null curr.next ! null; i) {curr curr.next;}ListNode next null;if (curr ! null) {next curr.next;curr.next null;}ListNode merged merge(head1, head2);prev.next merged;while (prev.next ! null) {prev prev.next;}curr next;}}return dummyHead.next;}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;} } 复杂度分析 时间复杂度O(nlog⁡n)其中 n 是链表的长度。 空间复杂度O(1)。
http://www.hkea.cn/news/14358298/

相关文章:

  • 网站建设方面书籍对象储存做网站
  • 网页是网站吗手机网站搜索
  • 中国建设工程造价协会网站主题网络图怎么设计
  • 为什么做腾讯网站商城网站做推广有什么好处
  • 网站空间站专业的外贸行业网站开发
  • 洛阳网站建设找洛阳铭信网络房地产首页设计
  • 微信链接网站怎么做的精智wordpress主题
  • 可以做mv的视频网站设计网站首页
  • 网站网站做维护犯罪聊城建设银行官方网站
  • 网站做404页面怎么做织梦 蓝色 个人网站博客网站源码
  • 给军方做网站套模板行不行有了域名之后怎么做网站
  • 购物网站建设规划书乐清网站改版
  • 麻城网站制作公司wordpress 导出 主题
  • 网站内容注意事项网站和管理系统哪个更难做
  • 帝国cms做淘宝客网站室内设计效果图片
  • 网站开发验收申请报告简述网页设计的开发流程
  • 怎么做网站省钱wordpress 链接新窗口
  • 设计网站大全网视频工厂网站建设
  • 网站设计培训费用是多少禁止wordpress更新提示
  • 微信小程序 连接网站门户网站有哪些局限性
  • 一级a做爰片免费网站给我看看南京百度seo代理
  • 马云做中国最大的网站wordpress去掉边栏
  • 网站推广一般多少钱最流行网站开发工具
  • 宝塔网站建设跳转微信可打开网站权重优化方式
  • 韩国最牛的设计网站大全沈阳世纪兴网站制作
  • 北京网站制作百度推广百度网站登录
  • 上海网站建设中小型企业wordpress博客设置主题方法
  • 同一家公司可以做几个网站吗免费ppt模板制作软件
  • 有什么做服装的网站好西安电商平台网站
  • 网站建设的目的及目标一个空间可以放几个网站