二维数组中的查找

题目描述

 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 
思路:从数组的最后一行,第一列a[i][j] 开始遍历,如果target大于该数,则列往右移 (++j),若target小于该数,则行往上移(--i),直到找到该数,或者到达边界条件退出循环(不含该整数)。
 
关键:在于这个题目是有序的。所以我们要利用有序这个条件来降低我们的时间复杂度。一看到“有序“,时间复杂度为o(nlogn)的字眼,我们就要想起二分搜索,虽然这个题目不是二分遍历,但是我觉得和二分遍历还是很像的,通过判断这一行的最小值是否比target小,然后往右移,通过判断这一列的最大值是否比target大,然后往上移。
 
代码:
         
 
class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int lenx = array.size();
        int leny = array[0].size();
        int i = lenx-1;
        int j =0;
        while(array[i][j]!=target&&i>=0&&j<leny)  //修改为:while(i>=0&&j<leny&&array[i][j]!=target)
        {
             if(array[i][j]<target) j++;
             if(array[i][j]>target) i--;
        }
        if(i<0||j>=leny) return false;
        else return true;
    }
};

 

相似题目:
posted @ 2018-08-18 09:47  wym95  阅读(177)  评论(0)    收藏  举报