Description:
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
问题描述:
给定矩阵,从左到右,从上到下,元素逐渐增大。
解法一:
思路:
基本二分法思路,考点在于把矩阵元素铺开成数组之间的转换关系(按列铺开)
Code:
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix == null || matrix.length == 0){
return false;
}
int start = 0, rows = matrix.length, cols = matrix[0].length;
int end = rows * cols -1;
while(start <= end){
int mid = start + (end - start)/ 2;
if(matrix[mid / cols][mid % cols] == target){
return true;
}
if(matrix[mid / cols][mid % cols] < target){
start = mid + 1;
}
else{
end = mid - 1;
}
}
return false;
}
}