977.有序数组的平方
思路
双指针。
数组平方的最大值就在数组的两端,不是最左边就是最右边。所以我们可以用一左一右两个指针,来获取最大值,再放入到我们的结果集。
代码
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l, r, i = 0, len(nums) - 1, len(nums) - 1
res = [0 for _ in range(len(nums))]
while l <= r:
if nums[l] ** 2 < nums[r] ** 2:
res[i] = nums[r] ** 2
r -= 1
else:
res[i] = nums[l] ** 2
l += 1
i -= 1
return res
209.长度最小的子数组
滑动窗口
代码
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l, r, i = 0, len(nums) - 1, len(nums) - 1
res = [0 for _ in range(len(nums))]
while l <= r:
if nums[l] ** 2 < nums[r] ** 2:
res[i] = nums[r] ** 2
r -= 1
else:
res[i] = nums[l] ** 2
l += 1
i -= 1
return res
59.螺旋矩阵II
代码
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
res = [[0] * n for _ in range(n)]
startx, starty = 0, 0
loop, mid = n // 2, n // 2
count = 1
for offset in range(1, loop + 1):
#upper left to right
for i in range(starty, n - offset):
res[startx][i] = count
count += 1
#up to bottom
for i in range(startx, n - offset):
res[i][n - offset] = count
count += 1
# from bottom right to left
for i in range(n - offset, starty, -1):
res[n - offset][i] = count
count += 1
# from bottom to up
for i in range(n - offset, startx, -1):
res[i][starty] = count
count += 1
startx += 1
starty += 1
if n % 2 != 0:
res[mid][mid] = count
return res