【剑指offer系列】 二维数组中的查找___3

  题目描述:
  在一个二维数组中,每一行的元素都是从左到右递增的,每一列的元素都是从上到下递增的。
  请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

  示例:
  输入数组为:
  【剑指offer系列】 二维数组中的查找___3_第1张图片

  若待查找数字为9,则返回true
  若待查找数字为5,则返回false

  代码:

bool find(vector<vector<int> >& nums,int target){
    int m=nums.size();
    if(m==0)    return false;
    int n=nums[0].size();
    int row=0,col=n-1;
    while(row<m&&col>=0){
        if(nums[row][col]==target){ 
            return true;
        }
        else if(nums[row][col]>target){   //比目标大时,向左查找
            --col; 
        }
        else{           //比目标小时,向右查找
            ++row;
        }
    }

    return false;
}

  分析:
  从数组的右上角开始查找,若目标比该数大,则一定在该数下方,若目标比该数小,则一定在该数左边。一直重复该操作,直到找到目标元素为止

  如要查找的元素是10:
  1)初始时,row=0,col=3,nums[0][3]=9<10,则row++
  2)row=1,col=3,nums[1][3]=12>10,则col–
  3)row=1,col=2,nums[1][2]=9<10,则row++
  4)row=2,col=2,nums[2][2]=10,返回true

你可能感兴趣的:(【剑指offer系列】 二维数组中的查找___3)