搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
leetcode74
示例 1:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true
示例 2:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false
提示:
- m == matrix.length
- n == matrix[i].length
- 1 <= m, n <= 100
- -104 <= matrix[i][j], target <= 104
这道题让我觉得有意思的地方是他的思路如果按照常规从左上角开始,就根本思考不出来,但是如果想到从右上角或者左下角开始就变成了一道简单题,至于为什么不能从左上角思考,原因是左上角往右和下走都是变大,你很难知道应该往右还是往下,而从右上角开始,往左是变小,往下是变大,这道题就很容易写了
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix[0].length-1, n=0;
while(true){
if(matrix[n][m] < target)
n++;
else if(matrix[n][m] > target)
m--;
else
return true;
if(n > matrix.length-1 || m < 0)
break;
}
return false;
}
}