1 import bisect 2 class Solution: 3 def searchMatrix(self, matrix: 'List[List[int]]', target: int) -> bool: 4 rows = len(matrix) 5 if rows == 0: 6 return False 7 columns = len(matrix[0]) 8 if columns == 0: 9 return False 10 rowlist = [] 11 for i in range(rows): 12 rowlist.append(matrix[i][0]) 13 14 rownum = bisect.bisect_left(rowlist, target) 15 16 if rownum >= rows: 17 rownum -= 1 18 elif rownum > 0: 19 if rowlist[rownum] == target: 20 return True 21 else: 22 rownum -= 1 23 collist = matrix[rownum] 24 idx = bisect.bisect_left(collist, target) 25 if idx >= columns: 26 return False 27 return collist[idx] == target
先按照列进行二分查找,找到符合的行,再对这一行进行二分查找。