二维数组中的查找

你快乐吗?

Posted by bbkgl on September 26, 2019

二维数组中的查找


思路参考:剑指Offer面试题:2.二维数组中的查找

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

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