小鲤算法之二维数组

二维数组有静态二维数组和动态二维数组;

静态二维数组

int a[10][];            //(1)
int a[2][]={
   
   {1,2}};     //(2)

(1)定义变量,[][]第一个是行,第二个是列;行一定要给出,列的话编译器会帮你算;

(2)部分初始化:其他未初始化元素为0;(上面两行代码只是为了比较,上机会爆的啊)

重头戏当然还是,动态规划二维数组啊

动态规划二维数组

当你害怕数组爆的时候,当你无力看着数组已经爆的时候,当你苦恼该定义多大的数组的时候,节省内存空间的你,来试一下动态规划二维数组吧:

int **myMalloc(int r, int c, int* returnSize, int** returnColumnSizes) {
    int i;
    int **ret = (int **)malloc( sizeof(int *) * r );        
    *returnColumnSizes = (int *)malloc( sizeof(int) * r );  
    *returnSize = r;                                        
    for(i = 0; i < r; ++i) {
        ret[i] = (int *)malloc( sizeof(int) * c );          
        (*returnColumnSizes)[i] = c;                        
    }    
    return ret;
}

指针数组-->元素是指针,指向内存

     二级指针-->指向一行一维数组的首地址;

          一级指针-->指向一个一维数组的首地址;

myMalloc的实现:

  • ①申请r个二级指针,(他们中的每个分别负责指向一个一维数组,但是这个时候他们还没有一维数组指向);
  • ②返回!这里的顺序不能与③调换

        返回1:行的长度,即为r;

       返回2:每行一维数组数,返回数组。所以我们在这里申请一个一维数组,所返回列的长度即为一个一维数组首地址;

  • ③循环+返回

循环r次,每次申请c个一个内存空间,即为一个一维数组,(让每个二级指针指向

c个一维数组的首地址);

同时返回每个一维数组个数,我们再②中所申请的一个一维数组就用于此;

  • 四返回二维数组首地址。

看懂了吗?看不懂刷刷题就懂了;懂了赶紧练个题巩固一下

867. 转置矩阵

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
 int**mymalloc(int r,int c,int*returnSize,int**returnColumnSizes){
 int **ret=(int**)malloc(sizeof(int*)*r);             
     *returnSize=r;
     *returnColumnSizes=(int*)malloc(sizeof(int*)*r);
     for(int i=0;i<r;++i){
         ret[i]=(int*)malloc(sizeof(int)*c);
         (*returnColumnSizes)[i]=c;
     }
   return ret;
 }
int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes){
    int i,j;
    int r=matrixColSize[0],c=matrixSize;
    int**ret=mymalloc(r,c,returnSize,returnColumnSizes);
    for(i=0;i<r;i++){
        for(j=0;j<c;j++){
            ret[i][j]=matrix[j][i];
        }
    }
        return ret;
    }

 766. 托普利茨矩阵

bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize){
    int i;
    int x, y;
    for (i = 0; i < *matrixColSize; i++) {
        x = 1;
        y = i + 1;
        while (y < *matrixColSize && x < matrixSize) {
            if (matrix[0][i] != matrix[x][y]) {
                return false;
            }
            x++;
            y++;
        }
    }
    for (i = 1; i < matrixSize; i++) {
        x = i + 1;
        y = 1;
        while (y < *matrixColSize && x < matrixSize) {
            if (matrix[i][0] != matrix[x][y]) {
                return false;
            }
            x++;
            y++;
        }
    }
    return true;
}

今天的内容已经结束了>_<

如果我的文章对你有帮助,不要吝惜你的点赞,小鲤希望得到你的支持ლ(´ڡ`ლ)

求三连和关注!!!

猜你喜欢

转载自blog.csdn.net/qq_62568686/article/details/121794236