题目描述:


在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]
给定 target = 7,返回 true。
给定 target = 3,返回 false。


题解1:暴力法

两次for 循环


代码

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        法一:暴力法
        for(int i =0;i<array.size();i++){
            for(int j =0;j<array[0].size();j++){
                if(array[i][j] == target)
                    return true;
            }
        }
        return false;
    }
};

二分法

数组从左至右从上至下是有序的,二分法查找


代码

class Solution {
public:
    bool baserch(vector<int> v,int target){
        int left = 0;
        int right = v.size();
        while(left <=right){
            int mid = (left + right)>>1;
            if(v[mid] > target)
                right = mid -1;
            else if(v[mid] < target)
                left = mid+1;
            else
                return true;
        }
        return false;
    }
    bool Find(int target, vector<vector<int> > array) {
        //法二:二分法,由于数组从左至右,从上至下是有序的,可以采用二分法进行搜索
        //二分法可采用自己写的方法,也可采用库函数
        for(int i =0;i<array.size();i++){
            //采用库函数
//             if(binary_search(array[i].begin(), array[i].end(), target))
//                 return true;
            //采用自己的
            if(baserch(array[i],target))
                return true;
        }
        return false;
    }
};

题解3:数组从左至右从上至下是有序的,避免重复查找。
不写了