leetcode-Slide_Window

滑动窗口

常用的模板和套路:

left = right = 0

一般是以right指针为驱动指针,left为被驱动指针,用来改变滑窗的大小

滑动窗口不单单可以用于有规律的数组,而且可以使用无规数组,因为里面的滑窗是有规律的

image-20240426165039685

二维数组的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 初始化二维数组下标的一般步骤:
row, col = len(nums), len(nums[0]) # 其中i代表的是行数,j代表的是列数,千万别初始化错了(先行后列)
for i in range(0, row):
for j in range(0, col):
print(nums[i][j])

# 正确初始化一个不可变对象的二维数组:(外行内列)
dp = [[0]*col for _ in range(row)]
dp = [[0 for _ in range(col)] for _ in range(row)]
# 不要用 dp = [[0] * n] * m, 否则里边都 引用的同一个 list,修改一个都会变。建议使用第一种,第二种也可以(稍慢),因为数字 0 是不可变对象

# 深浅拷贝。经常在回溯题中需要 res,path=[],[],path 是用来回溯的路径。找到一个结果的时候需要用 res.append(path[:]) 而不是 res.append(path)--》错!因为这里append的path的引用,之后修改了 path 结果就是错的!(或者用copy模块,不过不如[:]语法简洁)

# int范围。python在数值范围建议用:MAXINT = 2**63-1; MININT = -2**63 。因为 python2 sys.maxint 和 python3 sys.maxsize 不统一
# 正数的整数除法统一用"//"。比如二分求中间值 mid=(l+r)//2 或者 mid=l+(r-l)//2,因为python天生支持大数不会溢出两种写法都行。负数整数除法统一写 int(a/b)。 凡是遇到除法运算的题目建议统一使用 python3 提交。

[up主专用,视频内嵌代码贴在这]