LeedCode刷题笔记-二维数组中的查找
题目描述
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
给定 target = 5,返回 true。
给定 target = 20,返回 false。
解题代码
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target)
{
if(matrixSize == 0 || *matrixColSize == 0 || matrix == NULL)
{
return false;
}
int colsize = (* matrixColSize), i = 0, j = 0;
for(i = 0; i < matrixSize; i++)
{
if(matrix[i][colsize - 1] >= target && matrix[i][0] <= target)
{
for(j = 0; j < colsize; j++)
{
if(matrix[i][j] == target)
{
return true;
}
}
}
}
return false;
}
总结
- 有一个地方题目没有描述清楚,matrixSize是指的是二维数组的行数而不是总大小,这个比较坑人
- 还有就是列的大小不知道为什么要用指针的方式来给出
- 然后解题思路就是很简单的利用题目二维数组的特点去思考了,因为这个二维数组是递增的,每一行是递增的,每一列也是递增的
- 我这里采用的方法每一行去比较,如果是大于一行开始并且小于一行的结束,那就这一行遍历判断即可