Jianzhi Offer 04. 二次元配列での検索
n * m の二次元配列では、各行は左から右に昇順にソートされ、各列は上から下に昇順にソートされます。このような二次元配列と整数を入力し、配列に整数が含まれているかどうかを判定する効率的な関数を完成させてください。
方法:
二分法と同様に、右上隅から検索を開始します。それより小さい場合は現在の列を削除し、それより大きい場合は現在の行を削除し、何度も範囲を絞り込みます。もちろん、左下隅から開始してその逆を行うこともできます。
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if len(matrix) == 0:
return False
raw = 0
row = len(matrix[0]) - 1
while (row >= 0 and raw < len(matrix)):
if target == matrix[raw][row]:
return True
elif target > matrix[raw][row]:
raw += 1
else:
row -= 1
return False