题目
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-a-2d-matrix
示例
代码
将二维数组视为一维的有序数组解决即可,重点关注中位数是如何得出来的!
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
if (m == 0) {
return false;
}
int n = matrix[0].length;
//二分查找,定义左右查找
int left = 0;
int right = m * n - 1;
while (left <= right) {
int mid = (left + right) / 2;
//计算对应的二维矩阵对应的行列号,取出对应元素
int midElement = matrix[mid/n][mid%n];
//判断中间元素与target的大小关系
if (midElement < target) {
left = mid + 1;
} else if (midElement > target) {
right = mid - 1;
}else {
return true;
}
}
return false;
}
}