件名の説明:
m×nの行列、目標値の有無を判定するために効率的なアルゴリズムにより調製。この行列は、次の特徴があります。
昇順に左から各行の右側の整数。
最初の整数は、それぞれ整数前の行の最後の行よりも大きいです。
例1:
入力:
マトリックス= [
[2 ,. 5 ,. 6 ,. 9]、
[13、14 ,. 17 ,. 19である]、
[25、26れている、27、28]
]
ターゲット= 6。
出力:真
例2:
入力:
マトリックス= [
[2 ,. 5 ,. 6 ,. 9]、
[13、14 ,. 17 ,. 19である]、
[25、26れている、27、28]
]
ターゲット= 15
出力:偽
問題の解決策のアイデア:MXN与えられたトピックは、2次元マトリックス、実際の行列であるので、我々はの形で、ネストされたリストとして理解することができ、中間値の中の第1分割、ターゲットを見つけるために、バイナリ思考方法を探します[0,0,0]、[0,0,0]、[0,0,0]ので、Mの値ので、nが明らかになり、二つのリストの長さであり、そうで以来ミッド値を決定することができます。以下を達成するためのPythonコード:
クラスのソリューション(オブジェクト):
デフsearchMatrix(セルフ、マトリックス、ターゲット):
「」」
:型マトリックス:リスト[一覧[INT]]
:型ターゲット:int型
:RTYPE:BOOL
「」」
マトリックス==なしまたはlenの(マトリックス)== 0の場合:#行列は最初、空かどうかが決定されていません
リターン偽
行= lenの(マトリックス)
COL = LEN(行列[0])
スタート= 0
端=行* COL - 1
スタートながら、<=エンド:
半ば= +開始(終了-開始 )/ 2# (+終了を開始し)ない理由ミッドとして/ 2は、参照することがこのブログを
[ミッド/ COL] [ミッド%のCOL] ==ターゲットマトリックスの場合:
trueを返します
行列の場合[ミッド/ COL] [ミッド%COL]>ターゲット:
終了=中旬 - 1
そうしないと:
開始=ミッド+ 1
リターン偽