classSolution:defsortedSquares(self, nums: List[int])-> List[int]:
n =len(nums)
left, right, index =0, n-1, n-1
result =[-1]* n
while left<= right:if nums[left]*nums[left]>nums[right]*nums[right]:
result[index]= nums[left]*nums[left]
left+=1else:
result[index]= nums[right]*nums[right]
right-=1
index -=1return result
209.长度最小的子数组
解题思路
暴力解法: 超时
滑动窗口:
定义一个超级大的数
调节窗口的起始点
判断值是否为满足条件
classSolution:defminSubArrayLen(self, target:int, nums: List[int])->int:
res =float("inf")# 定义一个无限大的数
Sum =0# 滑动窗口数值之和
i =0# 滑动窗口起始位置for j inrange(len(nums)):
Sum += nums[j]while Sum >= target:
res =min(res, j-i+1)
Sum -= nums[i]
i +=1return0if res ==float("inf")else res
59.螺旋矩阵II
解题思路
确定转圈的左闭右开条件
理清楚闭环操作
classSolution:defgenerateMatrix(self, n:int)-> List[List[int]]:
result=[[0]* n for _ inrange(n)]
start_x, start_y =0,0
loop, mid = n//2, n//2
count =1for offset inrange(1, loop+1):for i inrange(start_y, n-offset):
result[start_x][i]=count
count+=1for i inrange(start_x, n-offset):
result[i][n-offset]=count
count+=1for i inrange(n-offset, start_y,-1):
result[n-offset][i]=count
count+=1for i inrange(n-offset, start_x,-1):
result[i][start_y]=count
count+=1
start_x+=1
start_y+=1if n%2!=0:
result[mid][mid]=count
return result