240. Search a 2D Matrix II

你快乐吗

Posted by bbkgl on November 24, 2019

江头未是风波恶

别有人间行路难

C++,剑指offer原题。

对于题意提出的有规律的数组,可以有如下思路:

  1. 从二维数组的左下角开始查找;
  2. 如果当前位置大于target,则说明target不可能在当前位置所在行或所在行的下方,将范围缩小到当前所在行的上方,即将查找范围矩阵的行数缩小一行bottom–;
  3. 如果当前位置小于target,则说明target不可能在当前位置所在列或所在列的左边,将范围缩小到当前所在列的右边,即将查找范围矩阵的列数右移一列left++;
  4. 找到了就直接返回true;
  5. 如果超出了边界条件就直接返回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;
    }
};