楊氏矩陣查詢

2021-09-08 01:58:55 字數 892 閱讀 2714

1. 簡述

楊氏矩陣中,每行元素是遞增的,每列元素也是遞增的。即a[i][j]2. 原理

從矩陣的左下角或者矩陣的右上角處開始遞迴執行,以左下角為例,value為要查詢的值,(i,j)為當前矩陣中的位置,初始為(m-1, 0)。

如果超過了矩陣範圍則說明不存在這樣的元素,返回-1,-1。

否則的話,如果當前位置的值大於value,說明要移動位置,使得數值減小,即遞迴使得i=i-1;如果當前位置的值小於value,說明要移動位置,使得數值增大,即遞迴使得j=j+1;如果剛好等於value,返回當前的位置i,j即可。

3. **

#include 

<

iostream

>

using

namespace

std;

#define

m 5#define

n 4int

array[m][n] =;

void

find_from_left_bottom(

int*

a, int

i,int

j, int

m, int

n, int

value, 

int&

x, int

&y) 

}int

main()  

4. 備註

最初遇到這道題的時候,糾結於把矩陣斜過來看,想用二分的方法,結果沒成功。還是老魏同學找到這個方法給我說明的。

另外,二維陣列傳遞的時候,傳int*就好了,反正通過函式傳遞後,陣列的結構資訊都會丟失,取得的就是普通的int *而不是行指標了,可以放心大膽的用*(a+i*n+j),要注意其中的n是j下標對應的長度哦。

5. 參考

楊氏矩陣演算法和思維   

楊氏矩陣查詢

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

楊氏矩陣查詢

方案一 時間複雜度o m n 原理 從右上角開始 左下角相同 如果arr i j t,就向左查詢,如果arr i j 2013.7.23 0423 function 楊氏矩陣查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個...

楊氏矩陣查詢

題目描述 楊氏矩陣,即在乙個二維陣列中,每一行都按照從左到右嚴格遞增的順序排序,每一列都按照從上到下嚴格遞增的順序排序。請完成乙個函式,輸入這樣的乙個 n n的二維陣列和 m個整數,判斷陣列中是否含有上述 m個整數。你能解決這個問題嗎?輸入格式 可能有多個測試輸入,第一行給出總共的測試輸入的個數。對...