2023-02-06 14:31阅读: 16评论: 0推荐: 0

《剑指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 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(16)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起