代码随想录算法训练营DAY2 | 977. 有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

讲解

题目及题解

题目链接:977. 有序数组的平方

  • 提前定义数组
  • 双指针
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        numsn = [float(inf)]*len(nums)
        l,r,i = 0,len(nums)-1,len(nums)-1
        while l <= r:
            if nums[l]**2 > nums[r]**2:
                numsn[i] = nums[l]**2
                l += 1
            else:
                numsn[i] = nums[r]**2
                r -= 1
            i -= 1
        return numsn

题目链接:209. 长度最小的子数组

  • 滑动窗口
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left,sums,res,length = 0,0,float(inf),len(nums)
        for j in range(length):
            sums = sums + nums[j]
            while sums >= target:
                rtmp = j - left + 1
                res = min(rtmp,res)
                left += 1
                sums -= nums[left-1]         
        if res != float(inf):
            return res
        else:
            return 0

题目链接:59. 螺旋矩阵 II

  • 每条边左闭右开

    在这里插入图片描述

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        ret = [[0]*n for _ in range(n)]
        startx,starty = 0,0
        offset,count = 1,1
        num = n//2
        while num:
            for j in range(starty,n-offset):
                ret[startx][j] = count
                count += 1
            for i in range(startx,n-offset):
                ret[i][j+1] = count
                count += 1
            for j in range(n-offset,starty,-1):
                ret[i+1][j] = count
                count += 1
            for i in range(n-offset,startx,-1):
                ret[i][starty] = count
                count += 1
            num -= 1
            offset += 1
            startx += 1
            starty += 1
        if n%2 == 1:
            ret[startx][starty] = count
        return ret
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值