题目描述:
Write an efficient algorithm that searches for a value in anm 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.
For example,
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target =3, returntrue.
思路解析:
- 题意:矩阵中找目标值,每一行都是从小到大排列的,后一行的第一个比上一行的最后一个值大。
- 把矩阵拉长,就是一个排好序的一维数组,查找就是需要二分法咯。
- 所以需要把low和high设置一下,low是0,high就是一共有多少个,注意减去1,rows*columns-1
- 然后需要注意的是mid怎么定位到目标的位置呢,行是mid/columns,列是mid%columns
代码:
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix==null || matrix.length==0||matrix[0].length==0){
return false;
}
int rows = matrix.length;
int columns = matrix[0].length;
int low = 0;
int high = rows*columns-1;
while(low<=high){
int mid = (low+high)/2;
int temp = matrix[mid/columns][mid%columns];
if(temp>target){
high = mid-1;
}else if(temp<target){
low = mid +1;
}else{
return true;
}
}
return false;
}
}