码不停题: 二维数组中的查找

227 阅读1分钟

题目简述: 有一个矩阵, 无论是按行还是按列都是单调递增的, 查找一个数是否存在于矩阵中.

C++:

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        // 判断数组不为空
        if(matrix.size() == 0 || matrix[0].size() == 0) return false;

        int row = 0;
        int column = matrix[0].size() - 1;

        while(row < matrix.size() && column >= 0) {
            // 获取当前元素
            int num = matrix[row][column];
            // 遍历数组
            if(num == target) {
                return true;
            } else if (num > target) {
                --column;
            } else {
                ++row;
            }
        }
        return false;
    }
};

解析:

  1. 思路: 从左上角开始查找, 如果左上角值大于目标, 则查找其左边的一列(因为往下走, 值都会更大); 如果左上角的值小于目标, 则查找其下一行(因为往右走, 值都会更小).

  2. 看清楚题目, C++用的vector, C用的数组, 求rows和columns是不同的.