【Leetcode刷题Day2】代码随想录:209长度最小子数组,977有序数组的平方,59.螺旋矩阵II

209长度最小的数组:

这道题还是采用双指针的方法,做过一次之后第二次做还可以,但是有三个点还需要注意:

1.用while而不是if:我们要一直移动left直到小于target,因此符号是大于等于

2.设置一个判断标志,来判断是否找到了满足要求的数组

3.长度是right-left+1

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        result = len(nums) #设置一个很大的数
        left = 0 #左指针
        total = 0
        exist = False
        for right in range(len(nums)): #右侧开区间
            total += nums[right]
            while total >= target:
                result = min(result, right-left+1) #>= 所以要加一
                total -= nums[left]
                left += 1
                exist = True
        if exist:
            return result
        else:
            return 0

977有序数组的平方

本题采用左右指针的方法,因为大的数都在数组的两边,平方小的数在中间,建立一个空的新数组,从后往前填数

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        k = len(nums) - 1
        i = 0
        j = k
        result = [0]*len(nums)
        while i <= j:
            if nums[i]**2 > nums[j]**2:
                result[k] = nums[i]**2
                k -= 1
                i += 1
            else:
                result[k] = nums[j]**2
                k -= 1
                j -= 1
        return result

59.螺旋矩阵II 

这道题逻辑比较简单,分好四种情况就可以写出来,需要注意的地方有:

1.当n为奇数时,最后一个数要当作中心点填充

2.确定offset,就是每次循环只填充n-1个数(最外层),offset=1

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        startx = 0
        starty = 0
        count = 1
        loop, mid = n // 2, n // 2  #循环圈数和中心点
        nums = [[0] * n for _ in range(n)]
        for offset in range(1, loop + 1) : #一圈一圈遍历,offset自己体会
            for i in range(starty, n - offset) : 
                nums[startx][i] = count
                count += 1
            for i in range(startx, n - offset) :    # 从上至下
                nums[i][n - offset] = count
                count += 1
            for i in range(n - offset, starty, -1) : # 从右至左
                nums[n - offset][i] = count
                count += 1
            for i in range(n - offset, startx, -1) : # 从下至上
                nums[i][starty] = count
                count += 1                
            startx += 1         # 更新起始点
            starty += 1
        
        if n % 2 != 0 :			# n为奇数时,填充中心点
            nums[mid][mid] = count 
        return nums

继续加油!!!明天要自学一下链表,然后做下链表的题!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值