题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

编程思想

首先选取数组中右上角(或者左下角)的数字,如果该数字等于要查找的数字则返回true,如果该数字大于要查找的数字则提出该数字所在列,如果该数字小于要查找的数字则提出该数字所在行。以此类推,可以缩小查找范围,直到查找成功或者查找范围为空。

编程实现

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int rowCnt = array.size();    //矩阵的行数
        int colCnt = array[0].size();    //矩阵的列数
        bool found = false;
        if(rowCnt > 0 && colCnt > 0)
        {
            int row = 0;
            int col = colCnt - 1;
            while(row <= rowCnt-1 && col >= 0)    //注意这里的临界条件
            {
                if(array[row][col] == target)
                {
                    //如果给的指向二位数组的指针的话
                    //array[row * colCnt + col]
                    found = true;
                    break;
                }
                else if(array[row][col] > target)
                {
                    --col;
                }
                else
                {
                    ++row;
                }
            }
        }
        return found;
    }
};

题目总结