自己想出來的思路:
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,...