介紹
楊氏矩陣中望抽,每行元素是遞增的芥备,每列元素也是遞增的稳懒。即a[i][j]<a[i+1][j]且a[i][j]<a[i][j+1]夯接。要在這樣的矩陣中查找某個數(shù)值元素的位置焕济,復雜度可以達到O(M+N),其中M為矩陣行長度盔几,N為矩陣列長度晴弃。
步驟
- 從矩陣的左下角或者矩陣的右上角處開始遞歸運行,以左下角為例问欠,value為要查找的值,(i,j)為當前矩陣中的位置粒蜈,初始為(M-1, 0)顺献。
- 如果超過了矩陣范圍則說明不存在這樣的元素,返回(-1枯怖,-1)注整。
- 否則的話,如果當前位置的值大于value度硝,說明要移動位置(向上移一行)肿轨,使得數(shù)值減小,即遞歸使得i=i-1蕊程;如果當前位置的值小于value椒袍,說明要移動位置(向右移一列),使得數(shù)值增大藻茂,即遞歸使得j=j+1驹暑;如果剛好等于value,返回當前的位置(i辨赐,j)即可优俘。
python
def young(lst, value):
raw = len(lst) #行數(shù)
col = len(lst[0]) #列數(shù)
i = raw - 1
j = 0
while i >= 0 and j <= col - 1:
if lst[i][j] == value:
return (i, j) #找到返回元素位置
elif lst[i][j] < value:
j += 1
else:
i -= 1
else:
return (-1, -1) #沒找到
lst = [[1, 3, 5], [2, 4, 6]]
print(yang(lst, 3))