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

2021-10-02 18:18:27 字數 1273 閱讀 4620

自己想出來的思路:

1、暴力搜尋二維陣列,時間複雜度為o(n^2)。

2、對每一行進行二分搜尋,時間複雜度為o(nlog(n))。

3、從第一行中找出大於搜尋數字的的列剔除,從第一列中找出大於搜尋數字的行剔除。在剩下的二維陣列中進行每一行的二分搜尋。時間複雜度還是o(nlog(n)),但是演算法的執行速度應該會比較快。

第二種思路的**:

#include

using

namespace std;

bool

binary

(int arr,

int a,

int begin,

int end)

if(a>arr[mid]

)else

return0;

}// void 2to1(int a,int b)

// }

intmain()

n_r++;}

//jinxingpandaun

cout

;int j;

for(

int i=

0; i(binary

(temp,7,

0,4)

) cout<<

"sorry!"

}}

劍指offer書中給的思路類似於我的第三種思路,事實證明我想多了,他的方法比較簡單,就是一級一級的剔除二維陣列。從右上角開始,如果右上角的數字大於我們所要搜尋的數字那麼就把這一列剔除,在從新的右上角開始。如果右上角的數字小於我們要搜尋的數字,那麼就剔除這一行。

**如下:

#include

using

namespace std;

bool

find

(int arr[

4],int a,

int col,

int row)

if(arr[col]

[row]

== a)

else

if(arr[col]

[row]

>a)

else

}int

main()

;if(find

(ar,

7,n_cl,n_row)

)else

return0;

}

注意:陣列的定義過程之中,除了第一維可以省略其他都不能省略,調bug時就是這裡出錯的。

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

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

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

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

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

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下的遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。c 實現 includeusing namespace std bool find int numbers,int rows,...