3 二維陣列中的查詢

2022-08-13 01:18:25 字數 2351 閱讀 5811

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

例如:

1 2 8 9

2 4 9 12

4 7 10 13

6 8 11 15

查7則返回true, 查5則返回false.

選取陣列右上角的數字。如果該數字等於要查詢的數字,查詢過程結束;如果該數字大於要查詢的數字,剔除這個數字所在的列;如果該數字小於要查詢的數字,剔除這個數字所在的行。

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

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...