题目
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例
示例1
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
示例2
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false
分析
矩阵整体是升序的,从合适的切入点开始查询可以大大提高代码效率,这里从右上或者坐下开始进行比较会有明显效果。
这里我从右上开始比较,如果右上角元素就是要找的目标值,直接返回true,不是则判断这个值与目标值的大小,小于目标值,表示目标值可能在本行前面其他的元素中(或者不存在),大于目标值则目标值可能在下面其他行元素中。
代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length == 0)
return false;
int row = 0; //行标从0开始
int col = matrix[0].length-1; //列标从每列最后一个开始
while(row < matrix.length && col >= 0) {
if(matrix[row][col] == target) //找到目标值
return true;
if(matrix[row][col] < target)
row++;
else if(matrix[row][col] > target)
col--;
}
return false;
}
}