這個題目說的是,給你乙個二維陣列 matrix,和乙個目標值 target。你要在陣列裡找到這個目標值,然後返回它的行/列下標。如果找不到,則返回 [-1,-1]。
這個陣列的每一行都是從左向右遞增,每一列都是從上到下遞增。和「二維陣列的二分搜尋」不同,這道題目並不保證每一行的第乙個數都比上一行的最後乙個數要大。
比如說,給你的二維陣列是:
1, 3, 5
2, 4, 6
給你的目標值是 4。目標值 4 在這個陣列中,找到後返回它的下標 [1, 1] 即可。
如果給你的目標值是 100,顯然它不在這個二維陣列中,你要返回 [-1,-1]。
首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的陣列,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的行。也就是說如果要查詢的數字不在陣列的右上角,則每一次都在陣列的查詢範圍中剔除一行或者一列,這樣每一步都可以縮小查詢的範圍,直到找到要查詢的數字,或者查詢範圍為空。
如果在乙個二維陣列中找到數字7,則返回true及下標,如果沒有找到,則返回false及[-1,-1]。
查詢過程如下:
'''# 思路:
# 首先選取陣列中右上角的數字。
# 如果該數字等於要查詢的數字,
# 查詢過程結束;如果該數字大於要查詢的陣列,
# 剔除這個數字所在的列;如果該數字小於要查詢的數字,
# 剔除這個數字所在的行。
# 也就是說如果要查詢的數字不在陣列的右上角,
# 則每一次都在陣列的查詢範圍中剔除一行或者一列,
# 這樣每一步都可以縮小查詢的範圍,直到找到要查詢的數字,
# 或者查詢範圍為空。
# array_01 = [[1,2,8,9,10],[2,4,9,12,100],[4,7,10,13,101],[6,8,11,15,102]]
array_01 = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
cols = len(array_01[0]) #列
rows = len(array_01) #行
print('陣列共有行,列,最大值'.format(rows,cols,array_01[rows-1][cols-1]))
number = input('請輸入要查詢的數字:')
class array_01:
##array 需要查詢的陣列 target 需要查詢的值
def find(self,target,array):
cols = len(array_01[0]) # 列
rows = len(array_01) # 行
if rows>0 and cols>0:
row=0
col=cols-1
while row=0:
if target == array[row][col]:
return print('value=在陣列內的位置 行= 列='.format(target,row+1,col+1))
elif target
col -=1
else:
row +=1
return print('value=未在陣列內發現位置 行= 列='.format(target,-1,-1))
c=array_01()
c.find(int(number),array_01)
劍指offer《一》 二維陣列中的查詢
劍指offer 一 二維陣列中的查詢 劍指offer 一 二維陣列中的查詢 題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。從上到下,如果最target比最右邊的數都大,從...
劍指offer(一) 二維陣列中的查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。該二維陣列是按照每行從左往右自增 每列從上到下遞增的順序排列的。所以可以考慮先從第一行開始遍歷每一行的第乙個元...
劍指Offer(一) 二維陣列中的查詢
這個系列是我在牛客網上刷 劍指offer 的刷題筆記,旨在提公升下自己的演算法能力。檢視完整的劍指offer演算法題解析 劍指offer完整習題解析 二維陣列中的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸...