🏆个人主页:企鹅不叫的博客
🌈专栏
⭐️ 博主码云gitee链接:代码仓库地址
⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!
💎一、题目
🏆1.题目描述
🏆2.原题链接
💎二、解题报告
🏆1.思路分析
🔑思路:
从右上角开始寻找,如果目标数比当前数大,则向下移动一行,如果小则向左移动一行
🏆2.时间复杂度
🧡O(N+M)
🏆3.代码详解
/*
* 输入 **matrix 是长度为 matrixSize 的数组指针的数组,其中每个元素(也是一个数组)
* 的长度组成 *matrixColSize 数组作为另一输入,*matrixColSize 数组的长度也为 matrixSize
*/
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
if(matrix == NULL || matrixSize == 0 || *matrixColSize == 0) return false; //1
int row = matrixSize, col = matrixColSize[0];
int i = 0, j = col-1;
while(i < row && j >= 0){
if(matrix[i][j] == target){ //2
return true;
}else if(matrix[i][j] > target){ //3
--j;
}else{ //4
++i;
}
}
return false;
}
1.首先判断matrix是否为空,以及matrixSize 行是不是0,以及*matrixColSize列是不是0
2.相等直接返回即可
3.target小于当前数则向左移动
4.target大于当前数则向下移动