240J. Search a 2D Matrix II
https://leetcode.com/problems/search-a-2d-matrix-ii/
Method Best: 都在备注中
站在右上角看。这个矩阵其实就像是一个Binary Search Tree.
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int m = matrix.length;
if(m < 1){
return false;
}
int n = matrix[0].length;
int right = n - 1;
int up = 0;
while(up < m && right >= 0){
if(matrix[up][right] == target){
return true;
}else if ( matrix[up][right] < target ){
up++;
}else{
right--;
}
}
return false;
}
}
当然站在左下角往上看也是的。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length < 1 || matrix[0].length < 1){
return false;
}
// 由于这个矩阵是上下和左右都有序的,比较巧。
//一个点左上的矩阵肯定都比他小,右下的矩阵都比他大
// 如果该点比target小,那么左上的子矩阵都被target小,不用比了,left++
// 如果该点比target大,那么右下的子矩阵都比target大,不用比了,down++
// 因此会逐渐由左下迫近到右上。
// 这个像是61b的多维数据查找。
// 所以可以用如下的方法
int left = 0;
int down = matrix.length - 1;
while(left < matrix[0].length && down > -1){
if(matrix[down][left] < target){
left++;
}else if (matrix[down][left] > target){
down--;
}else{
return true;
}
}
return false;
}
}
Last updated
Was this helpful?