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
找到target在哪一行,在从这行中找,Accepted代码如下:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix.length == 0) {
return false;
}
if (matrix[0].length == 0) {
return false;
}
if (target < matrix[0][0] || target > matrix[matrix.length - 1][matrix[0].length - 1]) {
return false;
}
int c = matrix.length - 1;
for (int i = 0; i < matrix.length; i++) {
if (target < matrix[i][0]) {
c = i - 1;
break;
}
}
for (int j = 0; j < matrix[0].length; j++) {
if (matrix[c][j] == target) {
return true;
}
}
return false;
}
}
此解法时间复杂度超过100%,但空间复杂度仅优于6%,不过还没发现空间上的优化方法。