/*
* 输入 **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)