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

2021-08-03 05:49:44 字數 1410 閱讀 7176

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

圖中是m行n列,共m*n個元素的正方形。但是可能會存在

陣列長度不一致的情況。如下圖:

解題思路:

1、暴力破解 (無需細說) 複雜度為o(m*n)

2、有序陣列的思路。(多個有序陣列查詢)

k way merge 多個有序陣列的合併

——常規 o(nk^2)

——最小

堆版本。維持乙個大小為m的最

小堆,時間複雜度是o(n*mlgm)

堆排序可以認為是兩個階段。

(1)、構造有序堆階段。o(m) 「heapify」 phase 將陣列放入堆順序。

3 2 6 5 4 -> (_siftup_max(result, 1) )3 5 6 2 4 -> (siftup_max(result, 0)) 6 5 3 2 4

(2)、下沉排序階段。「sortdown」 phase 重複提取最大值和恢復堆順序。 delo(lg m)和 inserto(lg m)

總共m*n個數,所以最後是o(n*m lgm)

3、行列都是有序陣列

從較大的有序的第乙個元素開始比較。(左下、右上都可以)

以查詢10為例子:複雜度為o(m+n)

**網上很多。過兩天初步看完劍指offer以後刷題的時候再分享。

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

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution else if array row col target col else row return ...

劍指offer面試題3 二維陣列查詢問題

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。暴力破解方式也就是對二維陣列中的每個元素逐個檢查,結束條件為找到和目標值相等的元素或者查詢到最後乙個元素。對於乙個行列數都為n的二維陣...

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

思路 當我們看到這道題的第一反應應該是遍歷這個二維陣列,逐個進行查詢,這樣雖然可以得到結果但是時間複雜度較大,並且沒有用到題目中給我們的線索,我們可以看到該二維數字是按照一定順序排列的。我們可以把這個四行四列的二維陣列看做乙個4 4的方格,先找出右上角的數字,如果右上角的數字是我們要找的數字就結束,...