題目:
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
思路:
首先選取數組中右上角的數字。如果該數字等於要查找的數字,查找過程結束;如果該數字大於要查找的數組,剔除這個數字所在的列;如果該數字小於要查找的數字,剔除這個數字所在的行。也就是說如果要查找的數字不在數組的右上角,則每一次都在數組的查找范圍中剔除一行或者一列,這樣每一步都可以縮小查找的范圍,直到找到要查找的數字,或者查找范圍為空。
舉例:
如果在一個二維數組中找到數字7,存在則返回True,如果沒找到則返回False。
首先,8大於7,下一次只需要在8的左邊區域查找;然后,5小於7,下一次只需要在5的下方區域查找;按照這種規則進行查找,如果查找到相同的,則返回True,否則返回False。
Python實現:
# -*- python3.6.6 -*- # -*- JluTiger -*- class Solution: # array 二維列表 def Find(self, target, array): # write code here rows = len(array) cols = len(array[0]) if rows >0 and cols >0: row = 0 col = cols-1 while row<rows and col>=0: if target == array[row][col]: return True elif target <array[row][col]: col -=1 else: row += 1 return False if __name__ =='__main__': target = 15 array = [[1,2,3],[4,5,6],[7,8,9],[10,12,13]] answer = Solution() print(answer.Find(target,array))