刷题日记-二维数组中查找某个目标值

时间复杂度 使用O(M+N)
使用一种比较巧妙的搜索方法:

  1. 从右上角开始搜索即x=0,y=n-1,arr[x][y]开始搜索
  2. 若arr[x][y]== target 则返回true
  3. 若arr[x][y]> target 若target小于当前值,只可能向左,即–y
  4. 相反,则向下向更大的值搜索,++x
class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        //总右上角开始搜索
        //如果比它小 只能往左
        int m = array.size();
        int n = array[0].size();
        int x = 0, y = n-1;
        //array[0][n-1]
        while(x<m && y >=0)
        {
            if(array[x][y]==target)
            {
                return true;
            }
            if(array[x][y]>target) //target比当前值小 到前一列左边找 肯定更小
            {
                --y;
            }
            else
            {
               ++x;
            }
        }
        return false;
    }
};
posted @ 2021-09-27 22:11  勒勒乐了  阅读(51)  评论(0)    收藏  举报