题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix/

题目比较简单,一上来的想法是二分,因为从题干可以看出这个矩阵其实可以看作一位数组处理。需要转换的逻辑只有mid的含义。由于题目输入是二维矩阵,此时的mid代表的其实是假设flatten到一维后的index,所以要转换成二维坐标(mid/n, mid%n)处理。

继续注意二分的各种边界问题~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int left = 0, right = m * n - 1;
while(left < right) {
int mid = left + right + 1 >> 1;
if(matrix[mid / n][mid % n] <= target) {
left = mid;
}
else {
right = mid - 1;
}
}
return (matrix[left / n][left % n] == target);
}
}