題目1384 二維陣列中的查詢

2021-06-26 16:35:17 字數 1570 閱讀 6782

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

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

輸入的第一行為兩個整數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

取巧的解法:輸入陣列的同時進行判斷

#include int a[1000][1000];

int main()

} if(flag)

printf("yes\n");

else

printf("no\n");

} return 0;

}

#include int a[1000][1000];

int main()

} int end = n-1;

for(int i = 0; i < m && !flag; ++i)

}} if(flag)

printf("yes\n");

else

printf("no\n");

} return 0;

}

繼續優化,利用young氏矩陣的性質,可以做到o(m+n)的複雜度:

#include int a[1000][1000];

int main()

} int row = 0, col = n - 1;

bool flag = false;

while(row < m && col >= 0)

else if(a[row][col] > t)

--col;

else

++row;

} if(flag)

printf("yes\n");

else

printf("no\n");

} return 0;

}

題目1384 二維陣列中的查詢

時間限制 1 秒記憶體限制 32 兆特殊判題 否提交 11118解決 2207 題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。輸入 輸入可能包含多個測試樣例,對於每個測試...

題目1384 二維陣列中的查詢

include intmain if flag 1 else return0 ps 一邊輸入一邊查詢,找到後標記。乙個二重迴圈即可 後記 11 20 今天看了 劍指offer 書上的方法為將矩陣存在乙個一維陣列當中,然後從矩陣的右上角 或者左下角 開始查詢 bool find int matrix,...

九度 1384 二維陣列中的查詢

include include using namespace std define nmax 1000010 intarr nmax 只需要從左下角或右上角開始查詢,即可。當是從右上角開始查詢時,左上角 row 0,column columns 1 1 若查詢的值key大於當前的值arr i 則說...