定義:
從左到右,從上到下,依次增大
查詢某元素
假設矩陣為
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
在裡面查詢7,如果我們從1開始,則1的右半部分,也就是剩下矩陣的全體,都可能會存在7,這是顯然不行的,我們要確定乙個確切的查詢規則,它沿著特定路線走,最後找到
我們看其規律,如果說要查詢的元素比當前元素大,則在其右半部與下半部 如果比當前元素小,則在其左半部與上半部。
而如果我們從右上角開始,9開始,查詢7,首先7小於9,所以要在其左半部分與上半部分查詢,9的上半部分是沒有的,左半部分就是第1 2 3 列,第4列排除掉(注意這個排除掉的意思,意思是說7不可能在這裡了)
我們往左走到8,7比8小,同樣我們還得往左走,那就是2,
7比2大,所以我們就找右下兩部分,右半部分,第3 4 列,我們其實前面已經排除了,只剩下下邊的,於是我們從2開始往下走,走到了4
······以此類推
楊氏矩陣難點在於如何選擇起始點,以及為什麼要選擇這個起始點。這一點一定要搞清楚。
我們這裡找到大於要尋找的元素,不再為向下還是向右猶豫不決了,我們只需要向下,碰到小於要尋找的元素也是如此。
#include #include using namespace std;
int a[4][4]=,,,};
int k=0;
bool findelem(int row,int col)
{ while((row>=0&&row<4)&&(col>0&&col<4))
{ if(a[row][col]=k)
return true;
if(a[row][col]
二維陣列中的查詢 楊氏矩陣
二維陣列中的查詢,楊氏矩陣 題目 在乙個二維陣列中,每行都按照從左到右的遞增的順序排序。每列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個陣列和乙個數,判斷陣列中是否包含這個數。例如 二維陣列 1 2 3 4 5 6 7 8 9 查詢數字7.注意 此題不是簡單的便利整個陣列進行查詢,此...
楊氏矩陣查詢
題目為 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序,如果在這個陣列中查詢數字6,則返回true 如果查詢數字10,由於陣列不含有該數字...
楊氏矩陣查詢
方案一 時間複雜度o m n 原理 從右上角開始 左下角相同 如果arr i j t,就向左查詢,如果arr i j 2013.7.23 0423 function 楊氏矩陣查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個...