【LeetCode笔记】148. 排序链表(Java、归并排序、快慢指针、双重递归)

文章目录

  • 题目描述
  • 思路 & 代码
      • 二刷

题目描述

  • 难点在于时空复杂度的要求
    在这里插入图片描述

思路 & 代码

  • 转化成:归并排序 + 合并两个有序链表 即可
  • 利用快慢指针来拆分成两条链表
  • 注意:链表的拆分 & 连接
  • 时间复杂度O(n * logn),空间复杂度 O(1)
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode sortList(ListNode head) {if(head == null || head.next == null){return head;}// 1. 快慢指针分出前后两部分,递归ListNode fast = head;ListNode slow = head;while(fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;}// 长度为2的情况特殊考虑if(slow.next == null){slow = head;}// 拆解,递归 O(logn)fast = sortList(slow.next);slow.next = null;slow = sortList(head);// 2. 返回值,进行合并(转化成合并链表)return mergeSortedList(slow, fast);}// 链表合并O(n)ListNode mergeSortedList(ListNode head1, ListNode head2){if(head1 == null){return head2;}if(head2 == null){return head1;}if(head1.val < head2.val){head1.next = mergeSortedList(head1.next, head2);return head1;}else{head2.next = mergeSortedList(head1, head2.next);return head2;}}
}

二刷

  • 好吧…记得思路是快慢指针 + 合并有序链表,但是具体咋写确实回想不起来= =
  • 其实就是两个函数:快慢指针二分链表 + 合并两个有序链表,双重递归!
class Solution {// 1. 快慢指针二分链表public ListNode sortList(ListNode head) {if(head == null || head.next == null) {return head;}ListNode slow = head, fast = head;while(fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}// 两个的情况,避免无限循环if(slow.next == null) {slow = head;}fast = sortList(slow.next);slow.next = null;slow = sortList(head);return mergeSort(slow, fast);}// 2. 合并两个有序链表 O(n)、O(1)public ListNode mergeSort(ListNode headA, ListNode headB) {if(headB == null) {return headA;}if(headA == null) {return headB;}if(headA.val < headB.val) {headA.next = mergeSort(headA.next, headB);return headA;}else {headB.next = mergeSort(headA, headB.next);return headB;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java substring截取字符串_lt;12gt;深入了解字符串

深入了解字符串完整视频教程&#xff1a;Java轻松入门经典教程[柠檬学院]-学习视频教程-培训课程-腾讯课堂​ke.qq.com字符串主要用于编程&#xff0c;用于概念说明、函数解释、用法详述等&#xff0c;字符串在存储上类似于字符数组&#xff0c;所以它的每一个单元都是可以提取…

【LeetCode笔记】88. 合并两个有序数组(Java、双指针)

文章目录题目描述思路 & 代码更新题目描述 比较简单&#xff0c;直接看思路吧&#xff01; 思路 & 代码 从后往前进行填数即可&#xff08;正确性可以保证&#xff09;时间复杂度 O(n) class Solution {public void merge(int[] nums1, int m, int[] nums2, int n…

thymealf如何实现传单个变量给html_梦回2013,看尤大vue的第一行代码,如何用30行代码实现vue(超简洁,适合初学者)...

非非非标题党&#xff0c;干货预警&#xff01;&#xff01;&#xff01;介绍大家好&#xff0c;我是清池交友 app 开发日记&#xff0c;记录清池交友 app 开发中学习过程和踩坑日记&#xff0c;伪全栈[1]技术栈&#xff1a;前端 js&#xff0c;vue&#xff0c;uniapp&#xff…

【LeetCode笔记】142. 环形链表 II(Java、快慢指针)

文章目录题目描述思路 & 代码更新版三刷 - 再更新题目描述 相对于环形链表&#xff0c;这里要求找到环的起点难点在于 O(1)&#xff0c;否则可以直接哈希表冲 思路 & 代码 找出快慢指针的路程关系&#xff0c;得出结论&#xff08;详见代码注释&#xff09; /*** …

python找出在原图中的位置_Python 通过截图匹配原图中的位置(opencv)实例

安装依赖 1&#xff09;下载安装opencv-2.4.9&#xff0c;并将cv2.pyd拷贝到python安装目录的site-package下 2&#xff09;pip install numpy 3&#xff09;pip install aircv 准备一张原图和截图 原图截图代码 import cv2 import aircv as ac # print circle_center_pos def …

【LeetCode笔记】287. 寻找重复数(Java、快慢指针、原地、链表)

文章目录题目描述思路 & 代码更新题目描述 可以理解成数组版本的 环形链表 II更多详细思路可见以上超链接。 思路 & 代码 如何转化成逻辑上的链表&#xff1f;nums[i] 是 第 i 个结点的 next 指针构造成一个有 nums.length - 重复次数 个结点的链表如此&#xff0…

如何安装python3_linux如何安装python3

linux如何安装python3&#xff1f; linux下配置安装python3 一、首先&#xff0c;官网下载python3的所需版本。 &#xff08;1&#xff09;方式一 1 wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 想下载到那个文件夹下就先进入到那个文件夹下——cd /home/d…

【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)

文章目录题目描述思路 & 代码无注释二刷题目描述 难点在于 O(n) 思路 & 代码 理解题意&#xff0c;分析出 O(n) 复杂度应该是要用到之前的值来得到当前值——动态规划核心结论&#xff1a;奇数比前一个数多一个1&#xff0c;偶数和偶数除二后的数的1数量一样边界 &…

【LeetCode笔记】560. 和为K的子数组(Java、前缀和、哈希表)

文章目录题目描述思路 & 代码暴力法 O(n2n^2n2)前缀和 哈希表 O(n)二刷题目描述 第一道前缀和题目&#xff5e; 思路 & 代码 暴力法 O(n2n^2n2) 固定一个值&#xff0c;从后往前找满足的条件即可 class Solution {public int subarraySum(int[] nums, int k) {i…

caffe不支持relu6_国产AI框架再进化!百度Paddle Lite发布:率先支持华为NPU在线编译,全新架构更多硬件支持...

乾明 边策 发自 凹非寺 量子位 报道 | 公众号 QbitAI国产AI框架飞桨刚刚带来新进化&#xff1a;Paddle Lite正式发布&#xff01;高扩展、高性能、轻量化&#xff0c;还是首个支持华为NPU在线编译的深度学习端侧推理框架&#xff0c;剑指加大力度攻占移动端侧场景。而且大环境如…

【LeetCode笔记】1143. 最长公共子序列(Java、动态规划、字符串)

文章目录题目描述思路 & 代码二刷三刷题目描述 算是很高频的面试题了&#xff0c;而且题号还挺后的 思路 & 代码 注意&#xff1a;dp[i]][j] 和 charAt(i) 有1的下标差&#xff08;dp初始化边界&#xff09;核心思想&#xff1a;当前值可构成新的最大子串就左上角值…

【LeetCode笔记】139. 单词拆分(Java、动态规划、字符串、哈希表)

文章目录题目描述思路 & 代码二刷更新题目描述 漏网之题。。一个月前写的居然没写博客 思路 & 代码 HashSet 存储 word&#xff0c;便于查询动态规划三要素在注释中思路&#xff1a;如果dp[j] true且[j1,i]可以组成单词&#xff0c;则dp[i] true class Solution…

mysqlfor循环中出错继续_Python学习笔记(循环)

循环语句1. while 循环while语句最基本的形式包括一个位于顶部的布尔表达式&#xff0c;一个或多个属于while代码块的缩进语句。while 布尔表达式:代码块while循环的代码块会一直循环执行&#xff0c;直到布尔表达式的值为布尔假。如果布尔表达式不带有<、>、、&#xff…

bootstrap table格式化字符串_你要的PHP字符串处理函数都在这了!

php中文网最新课程每日17点准时技术干货分享打印输出函数说明echo输出一个或多个字符串print输出字符串printf输出格式化字符串sprintfReturn a formatted stringfprintf将格式化后的字符串写入到流sscanf根据指定格式解析输入的字符vfprintf将格式化字符串写入流vprintf输出格…

【LeetCode笔记】35. 搜索插入位置(Java、二分法)

文章目录题目描述思路 & 代码Summary二刷题目描述 考虑了一下&#xff0c;还是把这道题作为单独一篇文了。主要是配合这篇题解一起理解二分法&#xff0c;实践太少理解还不够透彻&#xff0c;还是要温故知新 思路 & 代码 先贴代码&#xff0c;结合注释和下面的总结…

css鼠标变成小手_技巧篇:CSS高级技巧详解

元素的显示与隐藏display -- block;(转换为块元素&& 显示) none(隐藏 && 不保留原来的位置) -- 重要&#xff01;visibility -- visible(显示) hidden (隐藏 && 保留原来的位置 )复习&#xff1a;overflow:hidden; 1.之前解决父子关系垂直嵌套的合并塌…

【LeetCode笔记】300. 最长递增子序列(Java、动态规划、二分法、贪心)

文章目录题目描述思路 & 代码动态规划 O(n2n^2n2)动态规划 二分法 贪心 O(nlognnlognnlogn)二刷题目描述 难点在于时间复杂度 O(n * logn&#xff09;的做法 思路 & 代码 动态规划 O(n2n^2n2) 先抛砖引玉啦&#xff5e;dp[i]&#xff1a;以 nums[i] 结尾的子序…

zabbix内网安装部署_zabbix2.4.8升级3.0.31操作部署记录

1. 安装软件准备1.1. 软件准备1.zabbix-2.4.8.tar.gz zabbix-3.0.31.tar.gz下载地址&#xff1a;https://www.zabbix.com/download2.php5.4.16.tar.gz下载地址&#xff1a;https://www.php.net/downloads.php1.2. 注意事项安装过程路径、密码尽量不要出现中文、特殊字符、空格、…

【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)

文章目录题目描述思路 & 代码二刷题目描述 倒是和leetcode 287 寻找重复数很像。。但是不能使用那道题的快慢指针法&#xff08;也可能是我太菜了&#xff09;重点在于题干的描述【长度为 n 的数组&#xff0c;数字范围【0 &#xff5e; n - 1】 思路 & 代码 可以直…

回归问题的置信区间AUC_互助问答第193期:倾向得分匹配法与面板数据问题

问题一&#xff1a;老师您好&#xff01;我的问题是倾向得分匹配法之前要对匹配变量进行选择&#xff0c;我看见连玉君老师的一篇文章中主要是对处理变量和匹配变量做logit回归&#xff0c;然后根据准R方和AUC值判断&#xff0c;两者越大越好&#xff0c;通常来说AUC应该大于0.…