977.有序数组的平方
注意:有序数组在平方后的顺序发生改变。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
left, right, new = 0, len(nums)-1, len(nums)-1
ls = [0 for i in range(len(nums))]
while left <= right:
if nums[left]**2<nums[right]**2:
ls[new] = nums[right]**2
right -= 1
else:
ls[new] = nums[left]**2
left += 1
new -= 1
return ls
209.长度最小的子数组
注意: 遍历的指针代表滑窗尾,需要一个策略去更新滑窗头。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
left, right = 0, 0
subnum_len = 10**6
curr_sum = 0
while right<len(nums):
curr_sum += nums[right]
while curr_sum>=target:
curr_sum -= nums[left]
subnum_len = min(subnum_len,(right-left+1))
left += 1
right += 1
if subnum_len == 10**6:
return 0
else:
return subnum_len
59.螺旋矩阵II
注意:坚持循环不变量原则。每一个边只包含头不包含尾。
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
mtrx=[[0]*n for _ in range(n)]
loop, mid = n//2, n//2
x_start, y_start = 0, 0
num = 1
for circle in range(1,loop+1):
for i in range(y_start, n-circle):
mtrx[x_start][i]= num
num += 1
for i in range(x_start, n-circle):
mtrx[i][n-circle]=num
num += 1
for i in range(n-circle,y_start,-1):
mtrx[n-circle][i]=num
num += 1
for i in range(n-circle,x_start,-1):
mtrx[i][y_start]=num
num += 1
x_start += 1
y_start += 1
if n%2==1:
mtrx[mid][mid]=n**2
return mtrx