牛客網《劍指Offer》程式設計 1 二維陣列中的查詢

2021-08-26 12:19:03 字數 889 閱讀 5539

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

bool find(int target, vector> array)

1.最先想到的思路是自左向右,自上向下遍歷array陣列,如果在陣列下標不越界的情況下能夠找到與target相同的數,則return true,否則return false。但是此種方式較慢,時間複雜度為o(m*n)。

2.另一種方式是,從左下角第乙個數開始遍歷。對左下角第乙個數而言,所有右邊的數都比它大,所有上邊的數都比它小。因此可以有以下演算法:i設定為行下標,j設定為列下標。

由左下角第乙個數開始遍歷array。當i與j分別在行和列的範圍內時:

當當前array中的數小於target時,說明應該在比當前的數大的數中尋找是否等於target的數,因此j++;

當當前array中的數大於target時,說明應該在比當前的數小的數中尋找是否等於target的數,因此i++;

如果當前的數等於target,return true。

如果i或j超過了行和列的範圍,return false。

實現c++**如下:

bool find(int target, vector> array) 

int row = array.size();

int col = array[0].size();

int i=row-1, j=0;

while (i >= 0 && j < col)

else if (target > array[i][j])

else

} return false;

}

牛客網 劍指offer 二維陣列查詢(2)

問題描述 給定二維陣列a,陣列中元素遞增,每一行元素按照從左到右遞增,每一列元素按照從上到下遞增。判斷關鍵值在陣列中是否存在 基本思路 陣列中元素有序,按照從小到大排列,依次查詢或者使用二分查詢法 關鍵點 如何將二分查詢應用到二維陣列中 自己的思路 二分查詢需要知道待查詢陣列元素個數,進而調整查詢邊...

牛客網《劍指Offer》(1)二維陣列的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。最簡單的一道題目啦,遍歷窮舉就可以啦,兩個for迴圈搞定,外層迴圈用於行遍歷,內層迴圈用於列遍歷。class ...

牛客網 劍指offer 遞迴 (1)

出現的問題 原因 返回值沒有考慮到所有情況 輸入引數n是乙個整數,自己只考慮n 0,n 1,n 2,n 39的情況,一直報錯。改正方案 加上else,判斷其他情況均輸出0,編譯通過 菲波那切數列數列有很多變形的問題 問題1 兔子問題 題目描述 已知一對兔子每乙個月可以生一對小兔子,而一對兔子出生後....