來自
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
例如下面的二維陣列就是每行、每列都遞增排序。如果在這個陣列中查詢數字6,則返回true;如果查詢數字5,由於陣列不含有該數字,則返回false。
本young問題解法有二(如查詢數字6):
1、分治法,分為四個矩形,配以二分查詢,如果要找的數是6介於對角線上相鄰的兩個數4、10,可以排除掉左上和右下的兩個矩形,而遞迴在
左下和右上的兩個矩形繼續找,如下圖所示:
2、首先直接定位到最右上角的元素,再配以二分查詢,比要找的數(6)大就往左走,比要找數(6)的小就往下走,直到找到要找的數字(6)為止,如下圖所示:
#include #include#include#include#include#include#includeusing namespace std;
const int n=4;
typedef vector> vv;
int data[n][n]=,,,};
pairbinsearch(const vector& vec,int low,int high,int key)
if(vec[mid]==key) return pair(1,mid);
else if(vec[mid]ivec(vec.size());
for(int i=0;ires=binsearch(ivec,0,vec.size()-1,key);
//在對角線上二分搜尋能夠找到
if(res.first==1) return true;
int seg=res.second;
//右上角
vv ur(seg+1,vector(seg+1));
vv dl(seg+1,vector(seg+1));
for(int i=0;i<=seg;++i)
for(int j=seg+1;j(4));
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
vec[i][j]=data[i][j];
cout<
楊氏矩陣的查詢
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序。如果在這個陣列中查詢數字6,則返回true 如果查詢數字5,由於陣列不含有該數字,則返回f...
楊氏矩陣查詢
題目為 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序,如果在這個陣列中查詢數字6,則返回true 如果查詢數字10,由於陣列不含有該數字...
楊氏矩陣查詢
方案一 時間複雜度o m n 原理 從右上角開始 左下角相同 如果arr i j t,就向左查詢,如果arr i j 2013.7.23 0423 function 楊氏矩陣查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個...