1.题目说明
一个二维数组,每一行从左到右都是递增,每一列从上到下也是递增,完成一个函数,找出该二维数组中是否包含某个指定的数。
2.思路
1)输入 : 二维数组 array 某个整型数 target
2)输出:True -有 False-没有
3)算法:因为该二维数组遵循一定的规律,可以从“极端”数据入手,比如右上角和左下角这两个数。
右上角数的特点,本行最大却本列最小,若要查找的数target比它大,那么肯定他们不是在同一行的,这一行就可以剔除。
反之,则他们肯定不是同一列的,这一例就可以剔除,缩小了查找范围。
同理,左下角的数本行最小却本列最大,若target比它小,则不在同一行,反之则不在同一列。
这样每次查找都可以剔除掉一行或者一列,降低了复杂度。
3.代码实现(以左下角开始查找为例)
class Solution
{
public :
bool Find(vector<vector<int>> array , int target)
{
if (array.empty())
return false;
int rows=array.size();
int clos=array[0].size();
int i=rows-1;
int j=0;
while(i>=0 && j<clos)
{
if (a[i][j]==target)
return true;
if (a[i][j]>target) // 我最小都比你大 肯定不在同一行 剔除这一行
i--;
else
j++;
}
return false;
}
};
本文介绍了一种针对递增有序二维数组的高效查找方法。利用数组的特性,从左下角或右上角开始搜索目标值,逐步排除不可能的行或列,大幅减少搜索范围,提高查找效率。
209

被折叠的 条评论
为什么被折叠?



