二維陣列的查詢

2021-09-26 01:23:06 字數 1497 閱讀 9468

題目描述

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

分析:從左下角元素往上查詢,右邊元素是比這個元素大,上邊是的元素比這個元素小。於是,target比這個元素小就往上找,比這個元素大就往右找。如果出了邊界,則說明二維陣列中不存在target元素。

ac**:

def find(self, target, array):

# write code here

row = len(array) - 1

col = len(array[0]) - 1

i, j = row, 0

while i >= 0 and j <= col:

if target < array[i][j]:

i -= 1

elif target > array[i][j]:

j += 1

else:

return true

return false

錯誤使用二分法,誤以為第二行第二列的值一定比第三行第一列大:

row = len(array) - 1

col = len(array[0]) - 1

i = int((row + 0) / 2)

j = int((col + 0) / 2)

while i >=0 and j >= 0 and i <= row and j <= col:

if target < array[i][j]:

i = int((i + 0) / 2)

j = int((j + 0) / 2)

elif target > array[i][j]:

i = int((row + i) / 2)

j = int((col + j) / 2)

else:

return true

return false

二分法正確思路:

把每一行看成有序遞增的陣列,利用二分查詢,通過遍歷每一行得到答案,時間複雜度是nlogn。

row = len(array) - 1

col = len(array[0]) - 1

i = 0

while i <= row:

low = 0

high = col

while low <= high:

mid = int((low + high) / 2)

if target < array[i][mid]:

high = mid - 1

elif target > array[i][mid]:

low = mid + 1

else:

return true

i += 1

return false

二維陣列查詢

近日微博上看到乙個題目,二維陣列查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序。如果在這個陣列中查詢數字7,則返回true 如果查詢...

二維陣列查詢

天氣變化大,生病折騰了1個禮拜,寫篇部落格壓壓驚。題目源自於清明假期前夕舍友春招的筆試題,後來得知是劍指offer上的一道題,書上應該有解題思路啥的。題目重述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,...

二維陣列查詢

題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請 完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解題思路 按照一般搜尋二維陣列的方法,從左到右,從上到下,比較難根據這個陣列的特點進行快速搜尋。可以從 右到左,從上到下,...