1,二維數組中的查找《劍指offer》
阿新 • • 發佈:2017-09-04
完成 -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》