[誤答ノート/python]コード-記憶力テスト3
質問する
解けなかった理由
問題は
に答える
バイナリ・ナビゲーションを行うには、ナビゲーションするリストをソートする必要があります.次に、検索する値が正の中間点(mid)より小さい場合は左側を参照し、検索する値がmidより大きい場合は右側を参照します.midが検索値になるまで、この手順を繰り返します.
n = int(input())
nums = list(map(int, input().split()))
m = int(input())
ques = map(int, input().split())
# 이진탐색으로 찾기
def findNum(start, end, arr, target):
# 시작지점이 끝지점보다 작거나 같을 때까지 반복
while start <= end:
mid = (start + end) // 2 # 중간지점
# 숫자를 찾았을 때 인덱스 값 반환
if arr[mid] == target:
return mid + 1
# 중간지점이 찾는 값보다 크면 왼쪽 부분 탐색
elif arr[mid] > target:
end = mid - 1
# 중간지점이 찾는 값보다 작으면 오른쪽 부분 탐색
else:
start = mid + 1
return -1 # 찾는 숫자가 없으면 -1 반환
for n in ques:
print(findNum(0, len(nums)-1, nums, n), end=' ')
もとのfor文の作成は以下のようになります.もう一度見てみると、本当に無心な手配でした.上のコードに比べて、もちろんもっと時間がかかります.for文ではif文で値が足りないと判別し、数値が見つかった場合numsリストでインデックスを再検索してインポートします.元気出して!for n in ques:
if findNum(0, len(nums)-1, nums, n):
print(nums.insert(n)+1, end=' ')
else:
print(-1, end=' ')
レビュー
I/O値制限事項は必ず問題を読むときに確認してください.そして、実行速度を速める方法、最小限のコードを書く方法を考えて問題を解決します...!
Reference
この問題について([誤答ノート/python]コード-記憶力テスト3), 我々は、より多くの情報をここで見つけました https://velog.io/@minji0801/오답노트파이썬-코드업-기억력-테스트-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol