Day2:螺旋矩阵II+区间和(前缀和)+数组总结!

螺旋矩阵II(太棒了!第一次自己做出来没看答案!虽然花了30分钟哈哈)

思路:

  1. 对于这种四个方向有规律的变化,最好采用同一套模式执行 例如:

             那么不管遇到n=100,99,98都不怕,都套进去就可以啦!

那么我们就要注意:

  • 确定圈数
  • 是否要处理中间位置
  • 四个方向如何表示(4个for循环)【这里有点难,光看是没有用的,建议自己画一个n=4的数组,然后把对应的下标标记出来,看看规律】

           for(j=count;j<n-1-count;j++) num[count][j]=a++; 

(count表示从0开始数的圈数,n-1-count是因为随着圈数的增加,我们覆盖数组的范围会越小)

比如第二圈就要减去1 2这两列

另外三个就是:

           for(i=count;i<n-1-count;i++) num[i][j]=a++;

           for( ;j>count;j--) num[i][j]=a++;

           for( ;i>count;i--) num[i][j]=a++;

(为什么后面两个是>count,是因为count从0 1 2依次递增的时候,回收也是随着圈数的增加i j是小到0,小1......)

class Solution {
    public int[][] generateMatrix(int n) {
        int[][]num=new int[n][n];
        if(n==1) {
            num[0][0]=1;
            return num;
        }
        if(n%2==1)  num[n/2][n/2]=n*n;
        int loop=n/2;
        int i=0,j=0,count=0,a=1;
        while(count<loop){
           for(j=count;j<n-1-count;j++) num[count][j]=a++;
           for(i=count;i<n-1-count;i++) num[i][j]=a++;
           for( ;j>count;j--) num[i][j]=a++;
           for( ;i>count;i--) num[i][j]=a++;
           count++;
        }
        return num;
    }
}

逆时针螺旋数组:

 while(count<loop){
            //顺时针从右上角开始,需要改的是j坐标
          for(j=n-count-1;j>count;j--)result[count][j]=a++;
           for(i=count;i<n-count-1;i++) result[i][j]=a++;
           for(;j<n-count-1;j++) result[i][j]=a++;
           for(;i>count;i--) result[i][j]=a++;
           count++;
        }

区间和

前缀和不多说啦,高中知识:

总结

  1. 数组是存放在连续内存空间上相同类型的数据集合
  2. 通过下标可以访问(支持随机访问的),下标从0开始
  3. 数组元素不能删除,只能覆盖
  4. java中 二维数组中例如int[2][4],不是2*4的连续空间!而是类似这种

因此应该是4条连续的空间

数组涉及到的算法思路:

  • 二分法(注意最好采用左闭右闭区间,while(<=))
  • 双指针(做到覆盖动作,按照递增/减从数组中取值的动作,1个for完成2个for的事)
  • 前缀和(记住公式)
  • 模拟题(需要借助画图,自己找规律)
  • 滑动窗口(看上去有两个循环,实际快慢指针都各自只访问元素一次,外循环定终止位置,内循环试探最短的窗口长度。记住模板)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值