劍指offer之面試題4 二維陣列的查詢

2021-10-05 11:12:39 字數 1010 閱讀 7678

1、題目

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

輸入引數:乙個二維陣列matrix,陣列的行數rows,陣列的列數columns,尋找的整數number

輸出引數:返回 true 或 false

2、解題

解這道題的關鍵在於每次都選取右上角的元素

在分析這個問題的時候,由於二維陣列已經按從上到下、從左到右的順序排好了序,因此任意從陣列中取出乙個元素 x 與要尋找的整數 num 比較後無非三種情況:

這時我們就出現了兩個不同方向的選擇,即便往下一步,還是存在兩個選擇,問題變得非常複雜。

因此,我們要做的就是找到陣列中的某個特定元素x,讓它在和num比較後只有乙個方向的選擇

二維陣列中,有兩個位置滿足這一條件,乙個是右上角,另乙個是左下角,通常我們選取右上角的元素作為x。

解題的具體步驟如下:

不斷縮小查詢範圍,直到找到 num 或者 查詢範圍等於空為止

3、**

bool find

(int

* matrix,

int rows,

int columns,

int number)

//當x > num時

else

if(matrix[row * columns + col]

> number)

col--

;//當x < num時

else

row++;}

}return found;

}

4、注意點

測試**見:

劍指offer面試題4 二維陣列的查詢

題目 二維陣列的查詢 在乙個二位陣列中,每一行都遞增,每一列的遞增,請完成乙個函式,查詢二維陣列中是否有number 方案 只需要每次從二維陣列的右上角開始查詢就可以了,因為如果右上角的數字都大於要查詢的number的話,那麼這一列肯定都大於number,我們只需要在剩下的列中找就行了,如果右上角的...

劍指offer 面試題3 二維數查詢 java實現

面試題3 題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。分析 首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束 如果該數字大於要查詢的數字,剔除這個數字所...

劍指offer面試題4 二維陣列中的查詢

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