私は、次の問題を解決するためにPythonでバイナリ検索を使用しています。a0、a1、a2、... an-1の順にn個の正の整数リスト。Pythonバイナリ検索Whileループが中断しない
あなたの友人は、「ここでは正の整数B.ここでBはリストの一部ですか?」のような質問をします。
Bがリストにある場合は、「はい」と表示されます。
あなたの仕事は、任意の入力に対して「はい」と答えた回数を出力することです。 10^5と1≤10^5、1≤M≤
1≤N≤A、B≤10^9
Iは、次のコードまで書いた:私はそれをテスト
n = int(raw_input())
a = [int(x) for x in raw_input().split()]
m = int(raw_input())
answer = 0
lo = 0
hi = len(a) - 1
end = False
for i in range(0, m):
B = int(raw_input())
while (lo <= hi):
mid = int((lo + hi)/2)
if B == a[mid]:
answer = answer + 1
break
elif B < a[mid]:
hi == mid - 1
elif B > a[mid]:
lo == mid + 1
print answer
を私はちょうど答えを出力することはありません、私は無限に終端に数字(文字でさえ)を書いています。文字を入力すると端末からエラーメッセージが表示されるので、最初の4行の後には、私が使用するまでは入力したものに応答しませんので、n、a、mの入力は成功しました。 ctrl Pythonから抜け出すためのZ。
これがなぜこのように扱われますか?私はこのプログラムも手で試してみたところ、うまくいったはずです。
ありがとうございます。
'ハイテク==半ば:
独自のバイナリ検索を記述することなく、これを達成するための別の方法は
bisect.bisect()
を使用することです' –@JohnnyMopp返信ありがとうございます!出来た。 –