劍指Offer(一) 二維陣列中查詢最大值

2021-09-12 10:51:48 字數 2057 閱讀 4952

這個題目說的是,給你乙個二維陣列 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完整習題解析 二維陣列中的查詢 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸...