JZ1 二位数组中的查找

题目描述

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

思路

关键点:左下角的元素
对于数组中的每一个元素,比它小的可能在它上面,可能在它左边,但是对于左下角元素来说,比它大的在它右边(此时这一列可以剔除),比它小的在它上面(此时这一行可以剔除);抓住这一点,从左下角这个元素开始与目标值进行比较,小了就往上,大了就往右;结束条件:找到这个元素,返回true;直到碰壁还没找到,返回false

伪代码

二维数组的行列:m,n
i=m-1,j=0—定义左下角元素
循环:结束条件(相等,或者碰壁);循环体内部进行比较

代码

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int m = array.size();    //行数
        int n = array[0].size();  //列数
        if(m==n&&m==0)  //若数组为空则直接返回false
            return false;
        int i=m-1;   //定义左下角元素
        int j=0;
        while(i>=0&&j<n)  //碰壁的时候结束
        {
            if(target == array[i][j])  //找到了
                return true; 
            if(target>array[i][j])   //大了就往右
                j++;
            else   //小了就往上
                i--;
        }
        return false;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务