二维数组中的查找(模拟)

题目来源https://www.acwing.com/problem/content/16/

思路:刚开始想对目标数在行、列分别进行二分,但感觉这样是有问题的。

由于行列都是递增序列,观察发现如果目标数比当前数小的话,则当前数的左边必定全部比目标数小。而如果大的话,当前数的下边

必定全部比目标数大,从左下角或者右上角开始判断,每次判断都能扫掉一行或一列,时间复杂度o(n+m)。

class Solution {
public:
    bool searchArray(vector<vector<int>> array, int target) {
        if(array.empty())return false;
        int x=0;
        int y=array[0].size()-1;
        while(x<array.size()&&y>=0){
            if(array[x][y]==target){
                return true;
            }
            else if(array[x][y]<target){
                x++;
            }
            else{
                y--;
            }
        }
        return false;
    }
};

 

原文地址:https://www.cnblogs.com/mohari/p/13739207.html