1. 程式人生 > >1,二維數組中的查找《劍指offer》

1,二維數組中的查找《劍指offer》

完成 -1 劍指offer brush off 右上角 ++ 個數 strong

題目:

在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

思路:

因為從左到右遞增,從上到下遞增,所以很容易發現是二分查找的變體,需要找到一個點(p),左邊的數比這個數小,右邊的比他大,所以又可以知道右上角的數字都是滿足這個條件的;然後通過比較右上角的數字和目標數字的大小(target):

  1.如果 比target大,那麽證明這個數所在列不可能存在這個數字,可以將整列排除(col--);

  2.如果比target小,那麽證明這個數字所在的行不可能存在這個數字,將整行排除( row++ );

直到循環結束,或者找到該數字;

代碼:

//c++
bool Find(int target, vector<vector<int> > array) {
        int rows=array.size();
        int cols=array[0].size();
        int row=0;
        int col=cols-1;
        while(row<rows&&col>-1){
            if(array[row][col]==target)return true;
            else if(array[row][col]>target)--col;
            else ++row;
        }
        return false;
    }

  

1,二維數組中的查找《劍指offer》