随笔分类 -  LeetCode每日刷题

以medium为主
摘要:链表的归并操作不需要额外空间,因而使用归并排序符合本题常数级空间复杂度的要求。最适合单链表的排序算法是归并排序。 ☆☆☆思路1:自顶向下的归并排序(递归) 时间复杂度O(nlogn), 空间复杂度O(logn),其中空间复杂度主要取决于递归调用的栈空间。 主要考察:1)归并排序思想;2)寻找链表中间 阅读全文
posted @ 2020-12-18 11:03 不学无墅_NKer 阅读(150) 评论(0) 推荐(0)
摘要:☆☆☆思路:关键点是每次从前往后寻找插入位置。 class Solution { /** * 每次拿出未排序的节点,先和前驱比较,如果大于或者等于前驱,就不用排序了,直接进入下一次循环 * 如果前驱小,则进入内层循环,每次从头开始比较,插入对应位置即可。 */ public ListNode ins 阅读全文
posted @ 2020-12-17 21:02 不学无墅_NKer 阅读(79) 评论(0) 推荐(0)
摘要:思路:【快慢指针 + 反转链表】通过快慢指针找到中间节点 > 切成两个链表 > 对后半部分进行reverse操作 > 依次比较前部分和后部分的值 与LeetCode143. 重排链表解法类似。 class Solution { public boolean isPalindrome(ListNode 阅读全文
posted @ 2020-12-15 10:50 不学无墅_NKer 阅读(54) 评论(0) 推荐(0)
摘要:自己想的方法是: 1. 求出链表长度 2. 找出倒数第K个节点的前一个节点 3. 断开链表,寻找后半部分链表的末尾节点,然后接上前半部分 上述方法的缺点是:寻找后半部分链表的末尾节点又需要遍历一次。 改进思路1:通过快慢指针寻找倒数第k个节点的前一个节点,最后快指针指向后半部分链表的末尾节点 改进思 阅读全文
posted @ 2020-12-15 10:20 不学无墅_NKer 阅读(83) 评论(0) 推荐(0)
摘要:思路: 快慢指针找到中间节点,切成两半。(注意链表长度的奇偶性) 后半部分 reverse 操作。 归并操作,即后半部分 塞到 前半部分的“缝隙”里,组成新的链表。 class Solution { public void reorderList(ListNode head) { if (head 阅读全文
posted @ 2020-12-14 22:26 不学无墅_NKer 阅读(45) 评论(0) 推荐(0)
摘要:思路:同剑指14.链表中倒数第k个结点 class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { /** * 方法1:计算链表长度,相当于两次遍历链表 */ /* ListNode dummyHead = ne 阅读全文
posted @ 2020-12-14 21:00 不学无墅_NKer 阅读(44) 评论(0) 推荐(0)
摘要:☆☆思路:改变链表节点的值。首先将下一个节点的值赋给node,然后直接跳过下一个节点(删除下一个节点)。 class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = no 阅读全文
posted @ 2020-12-14 20:14 不学无墅_NKer 阅读(91) 评论(0) 推荐(0)
摘要:☆☆☆☆【字节】 很综合的一道题目,用到 [LeetCode206. 反转链表] class Solution { public ListNode reverseKGroup(ListNode head, int k) { if (head == null || head.next == null) 阅读全文
posted @ 2020-12-14 17:10 不学无墅_NKer 阅读(74) 评论(0) 推荐(0)
摘要:方法1: class Solution { public ListNode swapPairs(ListNode head) { if (head == null || head.next == null) return head; ListNode dummyHead = new ListNode 阅读全文
posted @ 2020-12-14 15:49 不学无墅_NKer 阅读(110) 评论(0) 推荐(0)
摘要:解法:本题同剑指16.合并两个排序的链表 class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { /** * 解法1: 非递归 */ ListNode dummyHead = new ListNode(-1 阅读全文
posted @ 2020-12-14 11:38 不学无墅_NKer 阅读(83) 评论(0) 推荐(0)
摘要:☆☆☆☆解法:本题同剑指56.删除链表中重复的结点 class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListN 阅读全文
posted @ 2020-12-14 10:34 不学无墅_NKer 阅读(61) 评论(0) 推荐(0)
摘要:class Solution { public ListNode removeElements(ListNode head, int val) { if (head == null) return null; ListNode dummyHead = new ListNode(-1); dummyH 阅读全文
posted @ 2020-12-14 09:40 不学无墅_NKer 阅读(41) 评论(0) 推荐(0)
摘要:☆☆思路:栈 + 头插法。本题要求不能对节点进行翻转,那么对于逆序处理,首先应该想到数据结构【栈】。 class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { // 不能对节点进行翻转,故用到数据结构【栈】 阅读全文
posted @ 2020-12-13 19:34 不学无墅_NKer 阅读(72) 评论(0) 推荐(0)
摘要:☆☆☆解法:考虑进位值 以及 较短的链表补0 class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode cur = 阅读全文
posted @ 2020-12-13 18:47 不学无墅_NKer 阅读(65) 评论(0) 推荐(0)
摘要:思路1:类似LeetCode86. 分隔链表,设置两个虚拟头节点,最后拼接即可。 ☆☆思路2:分离节点后合并,不需要设置虚拟头节点 class Solution { public ListNode oddEvenList(ListNode head) { if (head == null || he 阅读全文
posted @ 2020-12-13 17:34 不学无墅_NKer 阅读(56) 评论(0) 推荐(0)
摘要:☆☆思路:要设置两个虚拟头节点 class Solution { public ListNode partition(ListNode head, int x) { if (head == null || head.next == null) return head; ListNode smallD 阅读全文
posted @ 2020-12-13 16:54 不学无墅_NKer 阅读(82) 评论(0) 推荐(0)
摘要:☆☆解法 class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListNode cur = head; while 阅读全文
posted @ 2020-12-13 16:27 不学无墅_NKer 阅读(72) 评论(0) 推荐(0)
摘要:☆☆☆思路:虚拟头节点 + 反转链表 class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if (head == null || head.next == null || m == n) ret 阅读全文
posted @ 2020-12-13 15:24 不学无墅_NKer 阅读(92) 评论(0) 推荐(0)
摘要:方法1:迭代反转链表。 ☆☆☆方法2:递归反转链表。 class Solution { // ListNode pre = null, next = null; // 方法3全局变量 public ListNode reverseList(ListNode head) { /** * 方法1:迭代法 阅读全文
posted @ 2020-12-13 10:33 不学无墅_NKer 阅读(97) 评论(0) 推荐(0)
摘要:class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { /** * 本题与219题仅在判断部分有改动 * 时间复杂度O(nlogn) 空间复杂度O(k) */ TreeSet< 阅读全文
posted @ 2020-12-12 20:58 不学无墅_NKer 阅读(47) 评论(0) 推荐(0)