《剑指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;
	}

这个非空检查看起来确实很不好看,但是我也不知道为什么要给这么个测试用例,一下子也没想到更优雅的写法
然后空间和时间效率都不算高

posted @ 2023-02-06 14:31  YaosGHC  阅读(21)  评论(0)    收藏  举报