977.有序数组的平方
双指针
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
# double pointers
l,r,i = 0, len(nums)-1, len(nums)-1
# create a list
result = [float('inf')]*len(nums)
while i>=0:
if nums[l]*nums[l]>nums[r]*nums[r]:
result[i]=nums[l]*nums[l]
l += 1
else:
result[i]=nums[r]*nums[r]
r -= 1
i -= 1
return result
209.长度最小的子数组
双指针,滑动窗口,搞清楚用一个for指的是起始点还是终点。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
sum = 0
lmin = len(nums)+1
i = 0
for j in range(len(nums)):
sum += nums[j]
while sum>=target:
lmin = min(lmin, j-i+1)
sum -= nums[i]
i += 1
if lmin == len(nums)+1:
return 0
else:
return lmin
59.螺旋矩阵II
模拟:关于正方形,四条边的处理情况尽量相同,想好四个角归属哪条边处理
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
matrix = []
for i in range(n):
row = [None] * n
matrix.append(row)
i = 0
j = 0
r = 0
for num in range(1, n**2+1):
matrix[i][j] = num
print("matrix[{}][{}] = {}".format(i, j, num))
if i==r and j<n-r-1:
j+=1
elif j==n-r-1 and i<n-r-1:
i+=1
elif i==n-r-1 and j>r:
j-=1
elif j==r and i>r:
i-=1
if i==r+1:
r+=1
# if num == (n-r-1)*4
return matrix