劍指Offer(一) 二維陣列中的查詢

2021-09-24 17:44:21 字數 1464 閱讀 9194

這個系列是我在牛客網上刷《劍指offer》的刷題筆記,旨在提公升下自己的演算法能力。

檢視完整的劍指offer演算法題解析:劍指offer完整習題解析

二維陣列中的查詢

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

首先我想到的是 乙個二維陣列 查詢其中是否存在乙個整數 直接進行兩個for迴圈是不是就可以了 但是我看到了這道題中最關鍵的資訊,**每一行每一列都是遞增排序的。**如果我使用兩個for迴圈的話是可以解決這個問題的,但是對於時間複雜度來說的話,如果這是乙個m*n的陣列,時間複雜度就是o(m×n),還是很大的,但是對於這個有序的排列陣列,我們是不是可以用更簡單的方式來解答那?

我們可以從右上角出發,首先選取陣列中右上角的數字,如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的陣列,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的行。

也就是說如果要查詢的數字不在陣列的右上角,則每一次都在陣列的查詢範圍中剔除一行或者一列,這樣每一步都可以縮小查詢的範圍,直到找到要查詢的數字,或者查詢範圍為空。

是不是很簡單?如果你還沒清楚的話 我們舉個例子進行說明

如果在乙個二維陣列中找到數字7,則返回true,如果沒有找到,則返回false。

查詢過程如下:

:# array 二維列表

deffind

(self, target, array)

:#rows 行 cols 列

rows =

len(array)

cols =

len(array[0]

)if rows >

0and cols >0:

row =

0 col = cols -

1while row < rows and col >=0:

if target == array[row]

[col]

:return

true

elif target < array[row]

[col]

: col -=

1else

: row +=

1return

false

劍指offer《一》 二維陣列中的查詢

劍指offer 一 二維陣列中的查詢 劍指offer 一 二維陣列中的查詢 題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。從上到下,如果最target比最右邊的數都大,從...

劍指offer(一) 二維陣列中的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。該二維陣列是按照每行從左往右自增 每列從上到下遞增的順序排列的。所以可以考慮先從第一行開始遍歷每一行的第乙個元...

劍指Offer(一) 二維陣列中的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。題目中的陣列大概就是這樣 優點 易於理解 直接遍歷獲取進行比較 不過多講解了直接放 public class ...