编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 输出: true
mark
解决思路:
使用二分查找,m行n列的矩阵matrix共有mn个元素,其中第x个元素对应matrix中位置为[x/n][x%n]。
实现代码如下:
public static boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
if (m == 0) return false;
int n = matrix[0].length;
int N = m*n;
int l=0,h=N-1;
int mid = (l+h)/2;
int i,j;
while(l<=h) {
i = mid/n;
j = mid%n;
if (matrix[i][j] == target) return true;
else if (target>matrix[i][j]) l = mid+1;
else h = mid-1;
mid = (l+h)/2;
}
return false;
}
来源:https://www.cnblogs.com/deltadeblog/p/9057978.html