文章目录
1. 题目
2.思路
首先我们要知道查找的本质就是排除,
所以当你要查找一个数时候,
你可以一个一个的查找,那么就说明你需要一个一个数的排除,
你也可以一堆一堆的查找,这样就可以一堆一堆的排除;
很明显,在排除的基础上, 谁排除得更多,那么就说明谁查找得更加快;
所以:这道题思路一:直接遍历二维数组,一个一个数得查找,肯定能够找到数是否在这个二维数组中;当是这种效率极其低下,也就是说明排除得效率也很低,一个一个得排除;
思路二:利用题目条件,提高算法的效率,题目说从左到右,从上到下,数都是依次递增的;那么我们就可以,获取,最右上角的值,作为参考,因为最右上角的值,是该行最大的数,该列最小的数,假如比该值要大的数,就排除了该数的一行的数,假如比该数要小,那么久排除了该数的一列的数;
画图演示以下
3.代码演示
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
//考虑到二维数组没有数
if(matrix.size() == 0) return false;
//定义出二维数组最右上角的数
int i = 0; //行数
int j = matrix[0].size()-1; //第一行最后一个元素的下标
while(i < matrix.size() && j >= 0)
{
//matrix[i][j]一定是i行的最大值,j列的最小值
if(target < matrix[i][j])
{
//满足这个条件,表示比该列j 的最小值还要小,排除该列
j--;
}
else if (target > matrix[i][j])
{
//满足这个条件,表示比行i 的最最大值还要大,排除该列
i++;
}
else
{
//找到了
return true;
}
}
return false;
}
};