【数组】209 长度最小的子数组、59 螺旋矩阵Ⅱ

209 长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

暴力解法:

        2层for循环,一个起始位置,一个终止位置,所有情况遍历一遍

滑动窗口思路:

        不断调节子序列的起始位置和终止位置以得出我们想要的结果。

        1个for循环做2个for循环的事情

        j指向的是终止位置

        如何移动起始位置?

i=0;

result=Max;

for(j=0; j<nums.size; j++){

        sum+=nums[j];

        while(sum>=s){   持续移动过程

                subL=j-i+1;

                result=min(result, subL);

                sum=sum-nums[i];

                i++;

        }

}

return result;

59 螺旋矩阵Ⅱ

模拟转圈

边界条件很多

关键点:正方形的四角何时处理(处理规则)

循环不变量:左闭右开[) 一次只处理一个节点

startX=0, startY=0;起始位置

offset=1;

count=1;

while(n/2){

        for(j=startY; j<n-offset; j++){

                nums[startX][j]=count++;

        }

        for(i=startX; i<n-offset; i++){

                nums[i][j]=count++;

        }

        for(; j>startY; j--){

                nums[i][j]=count++;

        }

        for(; i>startX; i--){

                nums[i][j]=count++;

        }

        startX++;

        startY++;

        offset++;

}

if(n%2==1){

nums[][]=count单独赋值

}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值