描述
写出一个高效的算法来搜索 m × n矩阵中的值 target 。
这个矩阵具有以下特性:
每行中的整数从左到右是排序的。
每行的第一个数大于上一行的最后一个整数。
样例
样例 1:
输入:
输出:
解释:
矩阵中没有包含2,返回false。
样例 2:
输入:
输出:
解释:
矩阵中包含3,返回true。
挑战
O(log(n) + log(m)) 时间复杂度
代码示例
因为是有序的二维数组所以直接二分查找范围和大小
public class Solution {
/**
* @param matrix: matrix, a list of lists of integers
* @param target: An integer
* @return: a boolean, indicate whether matrix contains target
*/
public boolean searchMatrix(int[][] matrix, int target) {
int row = matrix.length-1;
int col = matrix[0].length-1;
int left = 0;
int right = row;
int mid = 0;
while(left<=right){
mid = left+(right-left>>1);
if(matrix[mid][0]<=target&&matrix[mid][col]>=target){
break;
}
else if(matrix[mid][col]>=target) right = mid -1;
else left = mid +1;
}
left = 0;
right = matrix[mid].length-1;
while(left<=right){
int mid2 =left+(right-left>>1);
if(matrix[mid][mid2]==target) return true;
else if(matrix[mid][mid2]>=target)right = mid2-1;
else left = mid2+1;
}
return false;
}
}