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.
Example 1:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
Output: true
Example 2:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
Output: false
找出结果值是否在二位数组,二维数组已经排序,并且每一行的最后一个小于下一行的第一个:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int i=0;
if(matrix.length==0 || matrix[0].length ==0) {
return false;
}
while( i<matrix.length && matrix[i][0] <= target) {
if(matrix[i][0] == target) {
return true;
}
if(matrix[i][matrix[i].length-1] <target) {
i++;
}else if(matrix[i][matrix[i].length-1] == target) {
return true;
}else {
for(int j=0;j<matrix[i].length;j++) {
if(matrix[i][j] == target) {
return true;
}else if(matrix[i][j] > target) {
return false;
}
}
}
}
return false;
}
}