二维数组中的查找
对于题意提出的有规律的数组,可以有如下思路:
- 从二维数组的左下角开始查找;
- 如果当前位置大于
target
,则说明target
不可能在当前位置所在行或所在行的下方,将范围缩小到当前所在行的上方,即将查找范围矩阵的行数缩小一行m--
; - 如果当前位置小于
target
,则说明target
不可能在当前位置所在列或所在列的左边,将范围缩小到当前所在列的右边,即将查找范围矩阵的列数右移一列n++
; - 找到了就直接返回
true
; - 如果超出了边界条件就直接返回
false
。
代码如下:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if (array.empty()) return false;
int m = array.size() - 1, n = 0;
while (true) {
if (m < 0 || n >= array[0].size()) return false;
int temp = array[m][n];
if (temp < target) n++;
else if (temp > target) m--;
else return true;
}
}
};