演算法學習 04 二維陣列中的查詢

2021-10-18 06:37:10 字數 892 閱讀 1748

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

輸入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

輸出:true

分析:我們可以採用最簡單直接的方法,直接遍歷二維陣列,時間複雜度為o(n^2)。但是這種方法沒有充分利用給出的二維陣列行和列遞增的特點。首先我們知道,如果在一維有序陣列中,我們可以採用折半查詢的方法來加快查詢速度,同理我們可以將這種思路擴充套件到二維陣列上(詳細推理過程可以參考二維陣列的查詢):

大概步驟如下:

1)我麼設初始值為右上角元素,arr[0][5] = val,目標tar = arr[3][1]

2)接下來進行二分操作:

3)如果val == target,直接返回

4)如果 tar > val, 說明target在更大的位置,val左邊的元素顯然都是 < val,間接 < tar,說明第 0 行都是無效的,所以val下移到arr[1][5]

5)如果 tar < val, 說明target在更小的位置,val下邊的元素顯然都是 > val,間接 > tar,說明第 5 列都是無效的,所以val左移到arr[0][4]

6)繼續步驟2)

c++**實現

bool

find

(int target, vector

int>

> array)

return

false

;}

04 二維陣列中查詢

在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個高效的函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。示例 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,14,17,24 18,2...

04 二維陣列中的查詢

給定乙個二維陣列,其每一行從左到右遞增排序,從上到下也是遞增排序。給定乙個數,判斷這個數是否在該二維陣列中。consider the following matrix 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,14,17,24 18,21,23,26,30 ...

04 二維陣列中的查詢

題目 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。public class testmethod system.out.println method ar...