https://leetcode.com/problems/search-a-2d-matrix/
这个题目看得出来matrix从头到尾就是一个排序的集合,所以二分查找是必然的。唯一要做的处理就是每次换行的时候怎么进行跳转。
每次我们计算了中间值后,可以从中间数算出对应的matrix的长和宽:
Matrix 长 = mid / column;
Matrix 宽 = mid % column;
这样这个题目直接套用二分查找的模板就可以了,这里我们采用的是比较简单的[left, right]左右都闭合的写法。
public boolean searchMatrix(int[][] matrix, int target) {
// matrix的长和宽
int row = matrix.length, column = matrix[0].length;
int l = 0, w = row * column - 1;
while(l <= w) {
// 计算中间数
int mid = l + (w - l) / 2;
// 从中间数算出对应的长和宽
int curr_l = mid / column;
int curr_w = mid % column;
if (matrix[curr_l][curr_w] == target) return true;
else if (matrix[curr_l][curr_w] > target) {
w = mid - 1;
} else {
l = mid + 1;
}
}
return false;
}