代码随想录算法训练营第二天 | 209. 长度最小的子数组、59. 螺旋矩阵 II

209:

这道题第一反应肯定是两轮for循环暴力拆解了,但是很遗憾的超时了,其实也能想到能否像一个滑动的水滴一样从数组从左往右挪动过去,但是我觉得之前最不明白的也是卡哥点醒的那点,这题需要以末尾位置作为锚定点来进行循环。

其次就是python太久没敲代码手生了,一些语法基础需要再熟练一下:

max_value=float('inf')
min_value=float('-inf")
#多个赋值
#不能i,j,k=0
i = length = sums = 0
#或者解包
i, length, sums = 0, 0, 0
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        result=float('inf')
        flag=False
        i,length,sums=0,0,0
        for j in range(0,len(nums)):
            sums+=nums[j]
            length+=1
            while sums>=target:
                result=min(result,length)
                flag=True
                sums-=nums[i]
                i+=1
                length-=1
        if flag:
            return result
        else :
            return 0

59:

遇到这道题我的思路就是,先初始一个二维矩阵用来填写数组,再初始化一个同样纬度矩阵用来做为标记矩阵,从00开始往右依次放入数据,如果遇到边界(这里的边界包含两种,一个是数组本身边界,另外一个是行进方向上,下一个数据在标记矩阵中对应为True)就改变方向,方向为右,下,左,上对应0,1,2,3(%4),直到修改过n^2的数据就结束返回。

但是在学习卡哥的代码以后,发现其实针对这类有规律的题目,可以进一步简化算法,找出其中的规律,我比较喜欢代码录中的四个边界的方法,不断缩小边界,在确定需要构造的数组是多大体量的情况下,真是一个不错的方法,而不像我这种需要从当前改变元素位置去探寻下一个位置在哪,而是跳出来给其设定找寻条件

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        top,bottom,left,right=0,n-1,0,n-1
        nums=1
        matrix=[[0]*n for _ in range(n)]
        while top<=bottom and left<=right:
            for i in range (left,right+1):
                matrix[top][i]=nums
                nums+=1
            top+=1
            for i in range (top,bottom+1):
                matrix[i][right]=nums
                nums+=1
            right-=1
            for i in range(right,left-1,-1):
                matrix[bottom][i]=nums
                nums+=1
            bottom-=1
            for i in range (bottom,top-1,-1):
                matrix[i][left]=nums
                nums+=1
            left+=1
        return matrix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值