74. Search a 2D Matrix

Compare

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

return false;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;

int i = 0, j = m * n - 1;
while (i <= j) {
int mid = (i + j) >> 1;
int midVal = matrix[mid / n][mid % n]; // 注意定位行和列的索引都是对 n 计算
if (target < midVal) {
j = mid - 1; // 目标值小于中点值,缩小范围至左侧区间继续搜索
} else if (target > midVal) {
i = mid + 1; // 目标值大于中点值,缩小范围至右侧区间继续搜索
} else {
return true;
}
}

return false;
}
}

References

74. Search a 2D Matrix