面試題 二維陣列中的查詢

2021-06-02 19:06:53 字數 1267 閱讀 3576

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

例如下面的二維陣列就是每行、每列都遞增排序。如果在這個陣列中查詢數字7,則返回true;如果查詢數字5,由於陣列不含有該數字,則返回false。

這是前兩天解決的乙個問題,寫出來總結一下。

遞迴函式如下,對於查詢矩陣,遞迴如下演算法。

對這個矩陣,從左上向右下方向查詢。

0.     如果當前位置(m, n)的資料等於所求資料,查詢成功。

1.     如果當前位置(m, n)的資料小於所求資料,說明(i <=m && j<=n)位置的資料均小於所求資料。淘汰。則查詢(m + 1, n + 1)。

2.     如果當前位置(m, n)的資料大於所求資料,則(i >m && j>n)位置的資料均大於所求資料。淘汰。則對(i=n)以及(i<=m&&j3.     考慮情況,某個矩陣是1*n或n*1的,也就是一行或一列,那麼就不要按對角線查詢了,按大小遍歷查詢即可。

4.     需考慮矩陣行列不相等情況,比如行到了邊緣,而列沒有。當前資料還小於所查資料,那麼淘汰調這半邊即可,對剩下那半個矩陣遞迴查詢。

時間緊,所述簡略,見諒,**附上。

#includeusing namespace std;

int data[100][100];

//引數:所查原始大矩陣行邊界,列邊界,所查矩陣塊的上邊界,下邊界,左邊界,右邊界,所查資料。

int search(int bound_r, int bound_c, int left_i, int right_i, int left_j, int right_j, int find_num)

} return 0;

} if(left_i == right_i)

} return 0;

} for(i = left_i, j = left_j; i <= right_i && j <= right_j; i++, j++)

else if(data[i][j] > find_num)

} if(j <= right_j && i > right_i)

if(i <= right_i && j > right_j)

}int main()

} search(3, 6, 0, 3, 0, 6, 17);

// search(3, 3, 0, 3, 0, 3, 8);

return 0;

}

面試題 二維陣列中的查詢

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

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

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

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

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