c语言数据结构二维数组中的查找


/*
 * 输入 **matrix 是长度为 matrixSize 的数组指针的数组,其中每个元素(也是一个数组)
 * 的长度组成 *matrixColSize 数组作为另一输入,*matrixColSize 数组的长度也为 matrixSize
 */

 //第一种解法暴力
 //遍历二维数组查找目标值
 //时间复杂度O(NM), 空间复杂度O(1)
 /*
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
    int i, j;
    for(i = 0; i < matrixSize; i++){
        for(j = 0; j < *matrixColSize; j++)
            if(matrix[i][j] == target)
                return true;
    }
    return false;
}

这是,用的暴击解发,
在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
但是,我不理解列数为什么用*matrixColSize表示

以下内容引用自GPT,有用希望采纳:
这里的 *matrixColSize 是一个指向数字的指针,指向的数字表示该行数组的长度(也就是该行有多少列)。

由于 matrix 是一个二维数组,表示矩阵,它可以被视为一组连续的一维数组。在内存中,矩阵按行的顺序依次排列,并且每行的元素也是依次排列的。因此,对于第 i 行第 j 列(从0开始计数)的元素,可以通过以下方式访问:

matrix[i][j]

其中,i 表示行数,j 表示列数。因此,如果想要在二维数组中确定一行的长度,可以通过查询 matrixColSize 数组来获取到该行有多少列。在这里,*matrixColSize 表示该指针指向的值,即第 i 行的长度(列数)。

举个例子,假设一个矩阵如下所示:

1 2 3
4 5 6
7 8 9

那么 matrixSize 就应该是3,表示矩阵有3行。而 matrixColSize 就是一个数组,其每个元素分别表示各个行的长度,也就是列数。假设 matrixColSize 的值为 {3,3,3},那么对于第2行第1列的元素 matrix[1][0] 来说,对应的列数就是 matrixColSize[1] 或者 *(matrixColSize + 1),也就是3。

你可以理解为 第三个参数 为 每行数据的 个数组成的 数组
比如 :
1 2 3 4
5 6
7 8 9
那 第三个参数 的元素就是 4, 2, 3 这三个列数 组成的数组
只不过你这里 每行的 列数都是相等的,所以 直接 取了 *matrixColSize
如果列数不一样,每行的列数 = *(matrixColSize + i)