重启人生1.0-day2:977.有序数组的平方;209.长度最小的子数组 ;59.螺旋矩阵II
977.有序数组的平方
一、暴力破解:先平方再排序
def sortedSquares(self, nums: List[int]) -> None:
new_nums = [0] * len(nums)
for i in range(len(nums)):
new_nums[i] = nums[i] ** 2
new_nums.sort()
return new_nums
# return sorted(num * num for num in nums)
二、双指针:
def sortedSquares(self, nums: List[int]) -> None:
n = len(nums)
new_nums = [0] * n
left, right, index = 0, n - 1, n - 1
while left <= right: #左,右指针
if nums[left] ** 2 > nums[right] ** 2:
new_nums[index] = nums[left] ** 2
left += 1
else:
new_nums[index] = nums[right] ** 2
right -= 1
index -= 1
return new_nums
209.长度最小的子数组
# 双指针
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
subL = len(nums) + 1
i = 0
result = 0
for j in range(len(nums)):
result += nums[j]
while result >= target:
subL = min(subL, j-i+1)
result -= nums[i]
i += 1
return 0 if subL == len(nums) + 1 else subL
59.螺旋矩阵II
def generateMatrix(self, n: int) -> List[List[int]]:
nums = [[0] * n for _ in range(n)]
left = 0
right = n - 1
up = 0
down = n - 1
w = 1
while left < right and up < down:
for i in range(left, right):
nums[up][i] = w
w += 1
for j in range(up, down):
nums[j][right] = w
w += 1
for m in range(right, left, -1):
nums[down][m] = w
w += 1
for k in range(down, up, -1):
nums[k][left] = w
w += 1
left += 1
right -= 1
up += 1
down -= 1
if n % 2:
nums[(n//2)][(n//2)] = w
return nums