1.主旨
- 理解二维数组的含义,比如数组是从0开始数的,储存方式是链式的矩阵(对于C++来说就是Vector包Vector),整体相对很简单,易于理解
2.考点
- 考点1:理解二维数组也是连续的空间,连续的编号对应的是连续的内存,可以快速访问;
- 考点2:善于发现查找对应值的比较方式,比如从右上角/左下角来进行没有重复区间的范围缩小,同时注意可能题目变形,使之从左上/右下来计算
3.代码
- 方法就一种,书上的方法:从右上角开始搜索,其小于target就删行,大于target就删列。其中删行原因:一行中最大的数都小于target,删列原因:一列中最小的数都大于target(其实严谨点还需要在开始时写个空Vector的保护,我没写= =)
- 时间复杂度不知道怎么估计,空间复杂度为O(1),牛客网时间12ms,内存1628K
bool Find(int target, vector<vector<int>> array)
{
int rows = array.size();
int columns = array[0].size();
int row = 0;
int column = columns - 1;
while (row < rows && column >= 0)
{
if (target > array[row][column])
{
row++;
continue;
}
if (target < array[row][column])
{
column--;
continue;
}
if (target == array[row][column])
return true;
}
return false;
}