題目描述:
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
輸入:輸入可能包含多個測試樣例,對於每個測試案例,
輸入的第一行為兩個整數m和n(1<=m,n<=1000):代表將要輸入的矩陣的行數和列數。
輸入的第二行包括乙個整數t(1<=t<=1000000):代表要查詢的數字。
接下來的m行,每行有n個數,代表題目所給出的m行n列的矩陣(矩陣如題目描述所示,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。
輸出:對應每個測試案例,
輸出」yes」代表在二維陣列中找到了數字t。
輸出」no」代表在二維陣列中沒有找到數字t。
樣例輸入:
3 351 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
樣例輸出:
yesnono
題意;查詢陣列中某個元素是否存在
解題:依次找肯定超時,根據從左到右,從上到下的順序,可以從矩陣的右上角開始查詢,
設矩陣為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,由於不含有該數字,則返回...