day 2 数组

80 阅读2分钟

day 2 任务

977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

  • 总结

建议大家先独立做题,然后看视频讲解,然后看文章讲解,然后在重新做一遍题,把题目AC,最后整理成今日当天的博客,拓展题目可以先不做

详细布置

977.有序数组的平方

题目建议: 本题关键在于理解双指针思想

题目链接:leetcode.cn/problems/sq…

文章讲解: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.长度最小的子数组——滑动窗口

题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。

题目链接:leetcode.cn/problems/mi…

文章讲解: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

题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。

题目链接:leetcode.cn/problems/sp…

文章讲解: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