leetcode传送门:传送门
题目大意是给定一个二维数组,然后去指定一个元素,最后确定二维数组中是否存在这个元素
有一说一,刚开始我并不会做,我想直接遍历二维数组,虽然这样很蠢,后来看了题解,明白过来,这个问题可能涉及到了二叉搜索树,他是这样一棵树:一棵空树或者这棵二叉树的左子树小于根节点,右子树大于根节点,左右子树都有类似的结构,不难看出这种结构很适合做搜索
从数组的右上角出发作为根节点,这就是一个二叉搜索树,元素大于节点数据时,我们可以往下走(行数加1),元素小于节点数据时,我们可以往左走(列数减1),便可以完成整棵树的搜索工作
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int m = matrix.length;
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int n = matrix[0].length;
int row = 0;
int col = n - 1;
boolean result = false;
while((row<m)&&(col>=0)) {
if(matrix[row][col]<target) {
//目标值大于当前值,则去往右子树搜索
row++;
}else if(matrix[row][col]>target) {
//目标值小于当前值,则去往左子树搜索
col--;
}else {
return true;
}
}
return result;
}
}
又是暴力的一天