本文實(shí)例講述了Python實(shí)現(xiàn)二維有序數(shù)組查找的方法。分享給大家供大家參考,具體如下:
題目:在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個(gè)函數(shù),輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù),判斷數(shù)組中是否含有該整數(shù)。
這題目屬于比較簡單但又很不容易想到的,問了兩個(gè)同學(xué),大家一時(shí)都沒有想出來怎么解決比較快。第一反應(yīng)都是二分查找。對于每一行進(jìn)行二分查找,然后查找過程可以把某些列排除掉,這是大家都能想到的基本的思路。
比較好的另一種思路是,首先選取數(shù)組右上角的數(shù)字,如果該數(shù)字等于要查找的數(shù)字,則查找結(jié)束;如果該數(shù)字大于要查找的數(shù)字,剔除這個(gè)數(shù)字所在的列,如果該數(shù)字小于要查找的數(shù)字,剔除這個(gè)數(shù)字所在的行。這樣每一步都可以剔除一行或一列,查找的速度比較快。
python實(shí)現(xiàn)的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# -*- coding:utf-8 -*- ''' 題目:在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 請完成一個(gè)函數(shù),輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù),判斷數(shù)組中是否含有該整數(shù)。 ''' def search(array, num): # 參數(shù)合法性判斷忽略 i = 0 j = len (array[ 0 ]) - 1 max_i = len (array) - 1 while i < = max_i and j > = 0 : if array[i][j] = = num: return True elif array[i][j] > num: j = j - 1 else : i = i + 1 return False if __name__ = = '__main__' : a = [[ 1 , 2 , 8 , 9 ], [ 2 , 4 , 9 , 12 ], [ 4 , 7 , 10 , 13 ], [ 6 , 8 , 11 , 15 ], ] print search(a, 14 ) print search(a, 7 ) print search(a, 0 ) |
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。