江头未是风波恶
别有人间行路难
C++,剑指offer原题。
对于题意提出的有规律的数组,可以有如下思路:
- 从二维数组的左下角开始查找;
- 如果当前位置大于target,则说明target不可能在当前位置所在行或所在行的下方,将范围缩小到当前所在行的上方,即将查找范围矩阵的行数缩小一行bottom–;
- 如果当前位置小于target,则说明target不可能在当前位置所在列或所在列的左边,将范围缩小到当前所在列的右边,即将查找范围矩阵的列数右移一列left++;
- 找到了就直接返回true;
- 如果超出了边界条件就直接返回false。
代码如下:
class Solution {
public:
bool searchMatrix(vector<vector<int>> &matrix, int target) {
if (matrix.empty()) return false;
int left = 0, bottom = matrix.size() - 1;
while (left < matrix[0].size() && bottom >= 0) {
if (target < matrix[bottom][left]) bottom--;
else if (target > matrix[bottom][left]) left++;
else return true;
}
return false;
}
};