思路
寻找最小连续区间很适合滑动窗口,滑动窗口写法有几个注意点:
关于r的临界条件是r<len(nums):
所以在while循环体中书写的顺序很重要,前面思考了很久
应当是win+=nums[r]在前,r+=1在后,中间是while循环体,用于处理win>=target的情况
中间一直想用if,elif来处理,发现不行:if只能处理一次,r=n,nums[n-1]比较大时,不太好处理
代码
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
l = 0
r = 0
win = 0
ans = len(nums) + 1
while r < len(nums):
if win<target:
win+=nums[r]
r+=1
if win>=target:
ans=min(ans,r-l)
l-=1
return ans if ans <= len(nums) else 0
思路
模拟
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
l=0
r=n-1
t=0
b=n-1
num,tar=1,n*n
matrix=[[0]*n for _ in range(n)]
while num<=tar:
for i in range(l,r+1):
matrix[t][i]=num
num+=1
t+=1
for i in range(t,b+1):
matrix[i][r]=num
num+=1
r-=1
for i in range(r,l-1,-1):
matrix[b][i]=num
num+=1
b-=1
for i in range(b,t-1,-1):
matrix[i][l]=num
num+=1
l+=1
return matrix