題目描述
在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
分析:從左下角元素往上查詢,右邊元素是比這個元素大,上邊是的元素比這個元素小。於是,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上的一道題,書上應該有解題思路啥的。題目重述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,...
二維陣列查詢
題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請 完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解題思路 按照一般搜尋二維陣列的方法,從左到右,從上到下,比較難根據這個陣列的特點進行快速搜尋。可以從 右到左,從上到下,...