hot100_240. 搜索二维矩阵 II
- 直接遍历
- 列减行增
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
示例 1:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
示例 2:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false
直接遍历
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
for(int[] row:matrix){
for(int num:row){
if(num==target){
return true;
}
}
}
return false;
}
}
列减行增
从右上角 matrix[0][n-1]开始,
matrix[x][y]==target,结束
因为每列递增:matrix[x][y]>target , 该列的所有数值都大于target (它在该列的最上边),y–
因为每行递增:matrix[x][y]<target ,改行的所有数值都小于target (它在改行的最右边),x++
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m=matrix.length,n=matrix[0].length;
int x=0,y=n-1;
while(x<m && y>=0){
if(matrix[x][y]==target){
return true;
}
if(matrix[x][y]>target){
--y;
}else{
++x;
}
}
return false;
}
}