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

2021-06-26 17:36:59 字數 1728 閱讀 2872

題目描述:

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

輸入:輸入可能包含多個測試樣例,對於每個測試案例,

輸入的第一行為兩個整數m和n(1<=m,n<=1000):代表將要輸入的矩陣的行數和列數。

輸入的第二行包括乙個整數t(1<=t<=1000000):代表要查詢的數字。

接下來的m行,每行有n個數,代表題目所給出的m行n列的矩陣(矩陣如題目描述所示,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。

輸出:對應每個測試案例,

輸出」yes」代表在二維陣列中找到了數字t。

輸出」no」代表在二維陣列中沒有找到數字t。

樣例輸入:

3 3

51 2 3

4 5 6

7 8 9

3 31

2 3 4

5 6 7

8 9 10

3 312

2 3 4

5 6 7

8 9 10

樣例輸出:

yes

nono

題意;查詢陣列中某個元素是否存在

解題:依次找肯定超時,根據從左到右,從上到下的順序,可以從矩陣的右上角開始查詢,

設矩陣為m * n, 右上角下標為(1,n),當t(查詢元素)大於(1,n)時,根據排序規律(從上到下,從左到右),t如果存在一定在(1,n)的下一行;如果小於(1,n),根據規律,t如果存在,一定在(1,n)的左邊;依次類推。

注意:不清楚用cin為毛會超時,用scanf()讀入

**如下:

/***********************************

author:

date: 2014-11-01

mail:

description: 二維陣列中的查詢

/**********************************/

#include#includeusing namespace std;

const int row = 1000 + 5;

const int col = 1000 + 5;

int matrix[row][col];

int m,n,t;

bool search_t(int t)

//往下走

else if(t < matrix[i][j]) //往左走

else if(t == matrix[i][j]) return true;

}return false;

}int main()

{ //freopen("572.txt","r",stdin);

while(scanf("%d %d",&m,&n) != eof) //while(cin>>m>>n)

{cin>>t;

for(int i = 1; i <= m; i++)

for(int j = 1; j <= n; j++)

//cin>>matrix[i][j];

scanf("%d",&matrix[i][j]);

if(search_t(t)) cout<<"yes"<

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

題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為兩個整數m和n 1 m,n 1000 代表將要輸入的矩陣的行...

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

題目 在二維陣列中,每行 每列的數字遞增,判斷乙個數字是否存在 分析 從二維陣列的右上角開始查詢,若找到,則停止 若比該數字大,則放棄該列 若比該數字小,則放棄該行。如下 include stdafx.h define maxn 100 bool find int matrix,int n,int ...

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

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