這個系列是我在牛客網上刷《劍指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 ...