楊氏矩陣的相關問題

2021-06-17 17:44:57 字數 1160 閱讀 6153

來自

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

例如下面的二維陣列就是每行、每列都遞增排序。如果在這個陣列中查詢數字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 楊氏矩陣查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個...