代码随想录算法训练营第二天 | 977.有序数组的平方,209.长度最小的子数组 ,59.螺旋矩阵II

学习目标:

1. 977.有序数组的平方:理解双指针思想。
2. 209.长度最小的子数组:理解滑动窗口。
3. 螺旋矩阵II:转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。


学习内容:

977.有序数组的平方

题目建议: 本题关键在于理解双指针思想

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录

视频讲解: 双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili

209.长度最小的子数组

题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录

视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili

59.螺旋矩阵II

题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录

视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili


学习产出:

  • 笔记 6 条

1. 滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。

2. Algorithm: 使用“滑动窗口”找到和至少为 target 的最短连续子数组。
(1) 初始化:
left, right = 0, 0: 初始化左右指针,表示当前窗口的左右边界。
l = len(nums): 获取数组的长度。
cur_sum = 0: 当前窗口的和初始化为 0。
min_len = float('inf'): 初始化最小长度为无穷大(表示还没有找到满足条件的子数组)。
(2) 外层循环(扩展窗口):
while right < l: 当 right 指针还在数组范围内时,继续循环。
cur_sum += nums[right]: 将 right 指针所指向的元素加入到当前窗口的和中。
(3) 内层循环(缩小窗口):
while cur_sum >= target: 当当前窗口的和大于或等于目标值 target 时,进入循环。
min_len = min(min_len, right - left + 1): 更新最小长度为当前窗口长度和之前最小长度中的较小值。
cur_sum -= nums[left]: 从当前窗口的和中减去 left 指针所指向的元素。
left += 1: 将 left 指针右移一位,缩小窗口。
(4) 在外层循环中右移 right 指针:
right += 1: 扩展窗口的右边界,将 right 指针右移一位。
(5) return: 如果 min_len 没有更新过,返回 0,否则返回 min_len。

3. 如果要写出正确的二分法一定要坚持循环不变量原则。而59.螺旋矩阵II依然是要坚持循环不变量原则。本题中的循环不变量是对每条边的处理规则:坚持左闭右开 或是 坚持左开右闭。

4. 建立n x n 的矩阵且初始值都是 0。

nums =[[0] * n for _ in range(n)] 

举个例子,如果 n 等于 3,那么这行代码生成的 nums 将会是:

nums = 
    [[0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]]

其中,for _ in range(n) 的作用是重复执行 n 次创建 [0] * n 这一列表的操作。 “_ ”只是一个占位符,表示循环变量在循环体内不被实际使用,因此我们可以简要理解为这个循环只是为了执行某个操作 n 次,而不需要使用每次循环的具体索引值。

5. 访问二维列表中的元素。

通过双重索引来访问和修改二维列表中的元素。例如:

# 访问元素
element = nums[1][2]  # 访问第二行第三列的元素,值为 0
# 修改元素
nums[1][2] = 5  # 将第二行第三列的元素值改为 5

修改后的 nums 为:

nums = [
    [0, 0, 0],
    [0, 0, 5],
    [0, 0, 0]
]

6. 列表推导式生成一个逆序的整数列表。

for i in range(n - offset, starty, -1):

这行代码使用了一个 for 循环来生成一个递减的整数序列,该序列从 n - offset 开始递减,直到 starty 之前(不包括 starty)。举个例子,假设 n = 5,offset = 1,starty = 1:range (n - offset, starty, -1) 会生成一个从4递减到2的整数序列,因为 n - offset 是4,starty 是1,所以循环会从4开始递减,直到1之前(不包括1)。因此,生成的整数序列是 [4, 3, 2] 。

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值