給定乙個二維整型矩陣,已知矩陣的每一行都按照從小到大的順序排列,每一列也都按照從小到大的順序排列。現在給出乙個數,請寫乙個函式返回該數是否存在於矩陣中。
矩陣**現的數字與需要查詢的數(k)都為0~100000之間的整數,且矩陣的大小在3000*3000以內。
在保證正確性的基礎上,請盡量給出比較高效的解法。請列出你的演算法時間複雜度與空間複雜度分別是多少?
輸入描述:
輸入兩個整數m,n, 且 0> matrix矩陣,大小為m行n列,與乙個int k,為需要查詢的數字。輸出描述:
輸出true或者false,true表示該數k存在於該matrix矩陣中,false表示該數k不存在於該matrix矩陣中。輸入例子1:
3 3輸出例子1:2 3 5
3 4 7
3 5 8
4
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...