day 2 任务
977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
- 总结
建议大家先独立做题,然后看视频讲解,然后看文章讲解,然后在重新做一遍题,把题目AC,最后整理成今日当天的博客,拓展题目可以先不做
详细布置
977.有序数组的平方
题目建议: 本题关键在于理解双指针思想
文章讲解:programmercarl.com/0977.%E6%9C…
视频讲解: www.bilibili.com/video/BV1QB…
- 难点:顺序需要从小到大,一开始是写了一个从大到小的代码,发现顺序错了 然后就是需要从后向前赋值,需要先定义list长度
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n=len(nums)
left,right,k=0,n-1,n-1
res=[-1]*n
while left <=right:
if abs(nums [left])>abs(nums[right]):
res[k]=nums[left]*nums[left]
left+=1
else:
res[k]=nums[right]*nums[right]
right-=1
k-=1
return res
209.长度最小的子数组——滑动窗口
题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。
文章讲解:programmercarl.com/0209.%E9%95…
视频讲解:www.bilibili.com/video/BV1tZ…
- 重点是记得是滑动窗口,中间易错点:min需要取每一次结果比较后的最小值;
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
n=len(nums)
res=n+1
j,sum,min1=0,0,n
for i in range(n):
sum+=nums [i]
while sum>=target:
res=i-j+1
min1=min(res,min1)
sum-=nums [j]
j+=1
if res<=n: return min1
else: return 0
59.螺旋矩阵II
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
文章讲解:programmercarl.com/0059.%E8%9E…
视频讲解:www.bilibili.com/video/BV1SL…
- 逻辑不是很复杂,重点是位置需要记清楚,每次的变量变化不能错
class Solution:
def generateMatrix(self, n: int) :
startx, starty = 0, 0 # 每次循环的起始位置
loop, mid = n // 2, n // 2 # 循环次数,中间的要特殊处理
count = 1 # 用来赋值
offset = 1 # 结尾缩进长度,每次循环加一
res = [[0] * n for x in range(n)]
while loop:
i, j = startx, starty
for j in range(starty, n - offset):# 第一行从左到右
res[startx][j] = count
count += 1
for i in range(startx, n - offset): # 最后一列从上到下
res[i][n - offset] = count
count += 1
for j in range(n - offset, starty, -1): # 最后一行从右到左
res[n - offset][j] = count
count += 1
for i in range(n - offset, startx, -1): #第一列从下到上
res[i][starty] = count
count += 1
startx += 1
starty += 1
offset += 1
loop -= 1
if n % 2:
res[mid][mid] = count
return res