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

2021-06-25 13:26:47 字數 1629 閱讀 1780

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

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

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

這題在leetcode上有相似的,具體的細節我在以後會寫,可以做到o(n)

1 #include 2 #include 3

using

namespace std;45

string search(int a[1000], int m, int n, int key)

6 18

19return"no

";20 }

2122

int main()

23 35 }

解題思路:從二維陣列的右上角的元素開始判斷,因為此元素是它所在行的最大數,是它所在的列的最小數。如果它等於要查詢的數字,則查詢過程結束。如果它大於要查詢的數字,則可以排除它所在的列。如果它小於要查詢的數字,則可排除它所在的行。這樣如果要查詢的數字不在陣列的右上角,則每次判斷都可以排除一行或一列以縮小查詢範圍,直到找到要查詢的數字,或者查詢範圍為空。

下圖是在二維陣列中查詢7的示意圖:

// 二維陣列matrix

// 每一行都從左到右遞增排序

// 每一列都從上到下遞增排序

bool find(int *matrix, int rows, int columns, int number)

else if(matrix[row * columns + column] > number)

--column;

else

++row;}}

return found;

}

面試題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,由於不含有該數字,則返回...