順序二維陣列的查詢

2021-07-04 05:36:42 字數 717 閱讀 2044

1、題目

就是給定乙個二維陣列,陣列裡面從左到右,從上到下都是非降序。然後查詢某個值是否存在。這個題目在劍指offer裡面也有。不過這裡用的是自己想出來的方法。

2、解法

這裡涉及到快速查詢肯定是想著使用二分查詢。模擬一維陣列的二分查詢,需要兩個指標表示範圍(也就是一條線段)。但是這裡是二維陣列,所以想著使用四個指標表示範圍(矩陣有四個角)。另外,二分查詢中肯定需要個中點,這個中心點自然而然選擇矩形的中心點。在一維陣列,中心點把陣列分成了兩個部分。這裡在二維陣列中,可以看作中心點把矩形分成了四個小矩形。那麼如何進行二分查詢呢?

這裡如果中心點等於target,則很簡單。如果中心點對應的值小於target,那麼只能去除乙個小矩形(如圖左上角)。這裡就發現沒法像二分查詢時候使用直接迭代的方法了。所以這裡使用遞迴呼叫,在剩下的三個小矩形中進行遞迴查詢。如果中心點對應的值大於target,同理分析即可。

另外有乙個可以優化的地方。容易發現後面三個遞迴可以變成另個遞迴呼叫。因為下面的兩個小矩形可以組成乙個大矩形(或者右側的兩個小矩形也可以組成乙個大矩形)。

一步步思路,很自然。具體見**。

class solution else if(matrix[r_m][c_m]>target)else

}return false;

}bool searchmatrix(vector>& matrix, int target)

};

二維陣列查詢

近日微博上看到乙個題目,二維陣列查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序。如果在這個陣列中查詢數字7,則返回true 如果查詢...

二維陣列查詢

天氣變化大,生病折騰了1個禮拜,寫篇部落格壓壓驚。題目源自於清明假期前夕舍友春招的筆試題,後來得知是劍指offer上的一道題,書上應該有解題思路啥的。題目重述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,...

二維陣列查詢

題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請 完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解題思路 按照一般搜尋二維陣列的方法,從左到右,從上到下,比較難根據這個陣列的特點進行快速搜尋。可以從 右到左,從上到下,...