在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數例如:
1 2 8 9查7則返回true, 查5則返回false.2 4 9 12
4 7 10 13
6 8 11 15
選取陣列右上角的數字。如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的數字,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的行。
也就是說如果要查詢的數字不在陣列的右上角,則每一次都在陣列的查詢範圍中剔除一行或一列。直到找到要查詢的數字,或者查詢範圍為空。
def find(matrix, number):
found = false
if isinstance(matrix, list):
rows = len(matrix)
if rows > 0 and isinstance(matrix[0], list):
columns = len(matrix[0])
else:
return found
else:
return found
if rows > 0 and columns > 0:
row = 0
column = columns - 1
while row < rows and column >= 0:
if matrix[row][column] == number:
found = true
break
elif matrix[row][column] > number:
column -= 1
else:
row += 1
return found
import unittest
class testfind(unittest.testcase):
def test_contain(self):
matrix = [
[1, 2, 8, 9],
[2, 4, 9, 12],
[4, 7, 10, 13],
[6, 8, 11, 15]
]number_max = 15
number_min = 1
number_middle = 7
res_max = find(matrix, number_max)
res_min = find(matrix, number_min)
res_middle = find(matrix, number_middle)
self.assertequal(res_max, true)
self.assertequal(res_min, true)
self.assertequal(res_middle, true)
def test_not_contain(self):
matrix = [
[1, 2, 8, 9],
[2, 4, 9, 12],
[4, 7, 10, 13],
[6, 8, 11, 15]
]number_max = 16
number_min = 0
number_middle = 5
res_max = find(matrix, number_max)
res_min = find(matrix, number_min)
res_middle = find(matrix, number_middle)
self.assertequal(res_max, false)
self.assertequal(res_min, false)
self.assertequal(res_middle, false)
def test_special(self):
matrix1 = none
matrix2 =
number = 5
res1 = find(matrix1, number)
res2 = find(matrix2, number)
self.assertequal(res1, false)
self.assertequal(res2, false)
if __name__ == "__main__":
unittest.main()
何海濤,劍指offer,電子工業出版社,2012
unittest --- 單元測試框架
3 二維陣列中的查詢
參考 二分查詢方法 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 劍指offer中提供的方法 如果我們從左上角開始查詢,那麼當查詢元素比左上元素大時,無法判斷是應該向下 向...
3)二維陣列中的查詢
題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 這個題目相對前面三題比較簡單,假設該二維陣列為下圖 a 主要是思路上面過去,實現起來挺簡單的,下面我介紹一下實現思路,有種...
3 二維陣列中的查詢
題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解析 取二維陣列的右上方的頂點與要找的數字比較,如果要找的數字比頂點的數字小,那麼捨棄該列 colu...