Day02 数组part02| LeetCode 209. 长度最小的子数组,59. 螺旋矩阵 II

长度最小的子数组——滑动窗口

209. 长度最小的子数组

  • 滑动窗口
    • 如何移动起始位置
    • 本质思想:双指针
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
          int realRes=nums.length+1;//最终结果的长度

          int sum=0;//滑动窗口的和
            int i=0;//滑动窗口的起始位置
        int length=0;//滑动窗口的长度
            for(int j=0;j<nums.length;j++)//j表示结束位置
            {
                sum+=nums[j];
                while(sum>=target)
                {
                    length=(j-i+1);
                    realRes=realRes<length?realRes:length;
                    sum-=nums[i++];//滑动窗口的和减去起始位置的值,同时起始位置向后移动
                }
            }
            if(realRes== nums.length+1)//没有符合条件的子序列
            {
                return 0;
            }
            return realRes;
}
}

螺旋矩阵

59. 螺旋矩阵 II

  • 遵循循环不变量原则

  • 每条边的处理规则:左闭右开?左闭右闭

  • 循环结束 n/2:要转n/2个圈,如果n为奇数的话,则对最后一个数作特殊处理

class Solution {
    public int[][] generateMatrix(int n) {
//        左闭右开
        int [][] result=new int[n][n];
        int startX=0,startY=0;//每一圈的起始位置
        int offset=1;
        int count=1;
        int loop=1;//当前圈数
        int i,j;
        while(loop<=n/2)
        {
                for( j=startY;j<n-offset;j++)
                {
                    result[startX][j]=count++;

                }
                for( i=startX;i<n-offset;i++)
                {
                    result[i][j]=count++;
                }
                for(;j>startY;j--)
                {
                    result[i][j]=count++;
                }
                for(;i>startX;i--)
                {
                    result[i][j]=count++;
                }
                startX++;
                startY++;
                offset++;
                loop++;
        }
        if(n%2!=0)//奇数
        {
            result[startX][startY]=count;
        }
        return result;


    }
}

posted on 2024-09-08 18:18  FreeDrama  阅读(17)  评论(0)    收藏  举报

导航