劍指offer——二維陣列中的查詢
阿新 • • 發佈:2018-12-10
原題在牛客網的劍指offer試題集裡,提交也是用牛客網的線上答題
題目描述
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
}
};
我的思路
說實在的我被題目撂倒了,一開始我是想從左上角進行判斷來找數字,就是比較大小來進行移動,但我發現,這樣右移或者下移都是變大的,這樣就很難進行移動了,因為會錯過可能的數值。
我想了想覺得用遍歷感覺太低效了,就來看看牛客們的品論,而點贊第一的思路就讓我恍然大悟。
其實從左下角還是右上角進行判斷移動都是可以的,因為數值變大或者變小的方向都是固定的,這樣移動過得行和列裡是不會有查詢的數字的,這樣就好判斷多了!
程式碼
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int rowNum=array.size();
int colNum=array[0].size();
int i=rowNum-1;
int j=0;
while(i>=0&&j<colNum){
if(array[i][j]<target){
j++;
}
else if(array[i][j]==target){
return true;
}
else{
i--;
}
}
return false;
}
};