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.
For example,
Consider the following matrix:
题意:在一个二维数组(其一维形式属于一个递增的序列)需找一个数,存在则返回TRUE,否则返回FALSE。
思路:先找到该数位于素组的哪一行,然后在这行中用二分查找。
代码:
public class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length,n = matrix[0].length, index = -1;
for(int i = 0; i < m; i++)
{
if(target >= matrix[i][0] && target <= matrix[i][n - 1])
{
index = i;
break;
}
}
if(index == -1)
return false;
int left = 0, right = n - 1;
while(left <= right)
{
int mid = (left + right) /2;
if(matrix[index][mid] == target)
return true;
else if(matrix[index][mid] > target)
right = mid - 1;
else
left = mid + 1;
}
return false;
}
}