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...