《剑指Offer》-4-二维数组中查找/力扣-240-搜索二维数组Ⅱ
从最后一列的第一个数字开始比较,依次倒数第二列第一个数字、倒数第三列...
找到第一个 <= target 的数字,这样可以将范围缩小到一列
然后用二分查找快速判断目标元素有没有
好吧为了方便我还是横着来
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int m = matrix.size(); if (!m) return false; int n = matrix[0].size(); if (!n) return false; for (int i =m - 1; i >= 0; i--) { if (matrix[i][0] <= target) { int left = 0, right = n - 1; while (left <= right) { int mid = (left + right) / 2; if (matrix[i][mid] == target) return true; else if (matrix[i][mid] > target) right = mid - 1; else left = mid + 1; } } } return false; }
这个非空检查看起来确实很不好看,但是我也不知道为什么要给这么个测试用例,一下子也没想到更优雅的写法
然后空间和时间效率都不算高
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/17095338.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
,
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步