1.使用二分查找

class Solution {
public:
    bool binarySearch(vector<int> &nums,int target)
    {
        int low = 0;
        int high = nums.size()-1;
        while(low <= high)
        {
            int mid = (low + high)/2;
            if(nums[mid] > target)
                high = mid-1;
            else if(nums[mid] < target)
                low = mid+1;
            else
                return true;
        }
        return false;
    }
    bool Find(int target, vector<vector<int> > array) {
        for(int i = 0;i<array.size();++i)
        {
            if(binarySearch(array[i],target))
                return true;
        }
        return false;
    }
};

2.根据矩阵的规律来解:左下元素大于它上方的元素,小于它右方的元素,右上元素与之相反

具体做法:

  • step 1:首先获取矩阵的两个边长,判断特殊情况。
  • step 2:首先以左下角为起点,若是它小于目标元素,则往右移动去找大的,若是他大于目标元素,则往上移动去找小的。
  • step 3:若是移动到了矩阵边界也没找到,说明矩阵中不存在目标值
class Solution {
public:
    bool binarySearch(vector<int> &nums,int target)
    {        
		int n = array.size()-1;
        int m = array[0].size()-1;
        for(int i = n,j = 0;i >= 0 && j<=m;)
        {
            if(array[i][j] < target)
                j++;
            else if(array[i][j]>target)
                i--;
            else 
                return true;
        }
        return false;
	}
};