力扣刷题题解注意(2

 力扣209长度最小的数组

def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        if not nums:#如果nums中没有元素,那么nums=NONE要考虑
            return 0
        a=0
        b=0
        lennums=len(nums)
        ans=lennums+1#可能出现数组中所有元素相加刚好大于target的情况
        sumnums=0
        while b<lennums:
            sumnums+=nums[b]
            while sumnums>=target:
                ans=min(ans,b-a+1)
                sumnums-=nums[a]
                a+=1
            b+=1
        return 0 if ans==lennums+1 else ans#如果ans与lennums+1相等则说明没有找到大于target的子数组
if not nums:#如果nums中没有元素,那么nums=NONE要考虑
    return 0

1.现实中可能要考虑给定的数组nums不存在元素的情况,所以首先判断,但是题目中明确说明nums.length>=1,所以不需要考虑,去掉也可AC。

return 0 if ans==lennums+1 else ans

2.结尾要考虑返回值,如果结束循环了ans的返回值与没参与循环相同,那么返回值为0,否则返回值ans

3.看到题目计算满足条件的最短数组,思路逐渐向滑动窗口靠近。但是滑动窗口不同于双指针,因为滑动窗口拥有“窗口值”,也就是代码中的sumnums,这个值是测试“窗口”是否满足条件的关键因素。“滑动”是指根据sumnums值与target的值的比较,最终计算出左右边界a、b。还要注意一点就是在大算法题目中,适当积累min(x,y)函数,节省时间和思维。

力扣59螺旋矩阵

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:        
        matrix=[[0]*n for _ in range(n)]#n行n列简便设置
        starti=0
        startj=0
        loop,mid=n//2,n//2
        count=1
        a=1
        for offset in range (1,loop+1):
            for j in range(startj,n-offset,1):
                matrix[starti][j]=a
                a+=1
            for i in range(starti,n-offset,1):
                matrix[i][n-offset]=a
                a+=1
            for j in range(n-offset,startj,-1):
                matrix[n-offset][j]=a
                a+=1
            for i in range(n-offset,starti,-1):
                matrix[i][startj]=a
                a+=1
            starti+=1
            startj+=1
        if n%2==1:
            matrix[mid][mid]=a
        return matrix

1.看到题目直觉开始模拟每一圈由四次递增做成,上右下左,但是对于向内的细节考虑不周。由于题目中给的是n=3,很容易模拟出一圈的变化。但是如果n=5,将要考虑向内螺旋的过程。所以不要仅仅模拟范例,要广泛思考。第一遍做的时候没有考虑每次循环递增的量offset。看到《代码随想录》的示例(如上),我在想为什么要使用offset和loop两个变量,这完全是一个值。(因为我控制大循环就是使用一个layer在逐渐递减……)。事实上,我们对于循环的每一圈来看它的“正方形”都是在不断缩小,所以需要控制它的大小就需要减去一个逐渐递增的值->offset,但是要对这个增值有所约束,毕竟不像递减(while(layer>0))即可。

2.积累

matrix=[[0]*n for _ in range(n)]:python对于n行n列的简便做法

loop,mid=n//2,n//2:python不同于C,python使用 “/” 表示浮点数相除,3/2=1.5(python)

所以python使用“//”表示整除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值