74. Search a 2D Matrix
解题思路
本题给了我们一个二维数组,又告诉我们保证每一行都是升序的,而且下一行的数一定比较大。简单来说,这个就是一个升了一个纬度的升序数组。于是乎,二分法再次成为我们的得力助手。
本题的思路核心在于,如何将二分法计算出来的中间值 mid
对二维数组取值,解决了这一点这题就没什么难度了。
C++
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size(), n = matrix[0].size();
int left = 0, right = n * m - 1;
while (left <= right) {
int mid = (left + right) / 2;
// 利用 mid 对二维数组取值
int value = matrix[mid / n][mid % n];
if (value == target) return true;
if (target < value) right = mid - 1;
if (target > value) left = mid + 1;
}
return false;
}
};
Javascript
var searchMatrix = function(matrix, target) {
let m = matrix.length, n = matrix[0].length;
let left = 0, right = n * m - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
// 利用 mid 对二维数组取值
let value = matrix[Math.floor(mid / n)][mid % n];
if (value == target) return true;
if (target < value) right = mid - 1;
if (target > value) left = mid + 1;
}
return false;
};