剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找
首先需要注意到题目下方的数据范围,n
和m
可能是0,所以当n
等于0时,需要及时返回false
,因为此时矩阵都不存在了,所以也就不存在有target
了。
这里还需要注意到题目上说到的是,从左到右依次递增,从上到下依次递增,所以我们取左上角作为中点进行二分,当当前位置(curX,curY)
的值等于要找的值target
时,我们返回true
即可,
否则若更小时,说明需要往大的方向上去找,就应该往下继续找curX
需要加1,否则说明要往小的地方找,curY
需要减1。
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int n = matrix.length;
if(n == 0) {
return false;
}
int m = matrix[0].length;
// 左上角才可以代表中点
int curX = 0, curY = m - 1;
while(curX <= n - 1 && curY >= 0) {
if(matrix[curX][curY] == target) {
return true;
} else if(matrix[curX][curY] > target) {
// 往更小的地方去找
curY--;
} else if(matrix[curX][curY] < target) {
curX++;
}
}
return false;
}
}
时间复杂度为O(n+m)
,空间复杂度为O(1)
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)