校招面試題二維有序陣列查詢

2021-09-17 21:40:05 字數 1001 閱讀 5381

給定乙個二維整型矩陣,已知矩陣的每一行都按照從小到大的順序排列,每一列也都按照從小到大的順序排列。現在給出乙個數,請寫乙個函式返回該數是否存在於矩陣中。

矩陣**現的數字與需要查詢的數(k)都為0~100000之間的整數,且矩陣的大小在3000*3000以內。

在保證正確性的基礎上,請盡量給出比較高效的解法。請列出你的演算法時間複雜度與空間複雜度分別是多少?

輸入描述:

輸入兩個整數m,n, 且 0> matrix矩陣,大小為m行n列,與乙個int k,為需要查詢的數字。
輸出描述:

輸出true或者false,true表示該數k存在於該matrix矩陣中,false表示該數k不存在於該matrix矩陣中。
輸入例子1:

3 3

​​2 3 5

​​3 4 7

​​3 5 8

4

輸出例子1:

true
例子說明1:

4位於矩陣的第二行第二列,故輸出true
#include using namespace std;

const int n = 3500;

int arr[n][n];

bool find(int n, int m, int target)

else if (arr[i][j] < target)

else

return true;

} return false;

}int main()

} scanf("%d", &target);

if (find(n, m, target))

printf("true\n");

else

printf("false\n");

}

二維有序陣列查詢某值

該類陣列查詢的要點是找到起點,若如上所示是各行各列遞增,那麼可選取右上角頂點為起點,效果為 當搜尋值 稱為num 不等於該頂點值 稱為point 時,搜尋範圍可一致減小 所謂一致減小,就是範圍減小後符合同一規律 在該例中,由於遞增 若 num point,可確定該點所在行均不符合要求,可將該poin...

面試題 二維陣列中的查詢

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

面試題3 二維陣列的查詢

一種思路是 利用二維陣列由上到下,由左到右遞增的規律,那麼選取右上角或者左下角的元素a row col 與target進行比較,當target小於元素a row col 時,那麼target必定在元素a所在行的左邊,即col 當target大於元素a row col 時,那麼target必定在元素a...