灵神基础算法精讲-07-学习笔记 876. 链表的中间结点给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 思路用两个指针指向链表的头节点,一个叫慢指针,一个叫快指针,每次循环慢指针走一步,快指针走两步,比如链表长度为 3 时,循环一次后,慢指针就指向中间节点了。 用数学归纳法可以证明,当链表长度为奇数时,快指针在最后一个节点时,慢指针一定在中间节点,对于偶数长度也是一样, 2024-12-23 LeetCode #链表
灵神基础算法精讲-06-学习笔记 206. 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 思路用火车来类比链表,链表的第一个节点也叫头节点,可以看成是火车头,其余节点可以看成是车厢,链表的每个节点都包含节点值和指向下一个节点的 next 指针,注意链表的最后一个节点指向空。 如果要反转链表,那么链表的第一个节点,它的 next 应该指向空,链表的其余节点,它们的 next 应该反过来指向它的上一个节点 2024-12-22 LeetCode #链表
灵神基础算法精讲-05-学习笔记 162. 寻找峰值峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 O(log n) 的算法来解决此问题。 做法定义红色为峰顶左侧元素,蓝色为峰顶或峰顶右侧元素。由于峰顶一 2024-12-21 LeetCode #二分查找
灵神基础算法精讲-04-学习笔记 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 思路利用数组是有序的这个性质,初始化两个指针,L为0,R为n-1,我们现在需要知道这个闭区间 2024-12-20 LeetCode #二分查找
灵神基础算法精讲-03-学习笔记 209. 长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 暴力做法枚举子数组的左端点,不断向右扩展,直到达到target为止;也可以枚举子数组的右端点,不断向左扩展,直到达 2024-12-19 LeetCode #滑动窗口
灵神基础算法精讲-02-学习笔记 11. 盛最多水的容器给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 思路容器的高度取决于容器两端更短的那条边,容器的宽度取决于容器两端之间的距离,也就是下标的差。 思考短的那条边,如果它和中间的边构成容 2024-12-18 LeetCode #相向双指针
灵神基础算法精讲-01-学习笔记 167. 两树之和 Ⅱ - 输入有序数组给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2],则1 <= index1 < index2 <=numbers.length。 暴力做法枚举第一个数(一个for循环),然后 2024-12-17 LeetCode #相向双指针