[探索バイナリ]Let code 704.Binary Search
6333 ワード
道路標識704号
ソート配列のターゲット値を検索し、インデックス値を返します.
復帰する pythonの再帰呼び出しの最大数は、1000回の再帰アルゴリズムの作成時の数を超えないことに注意してください.
複文
バイナリ探索アルゴリズムでは,中値を求める式を(左+右)/2と書く.これは両端のインデックスの平均値を求めて、とても直観的で熟知しています
ただし,資料型では最値が規定されているため,intの最大値が左+右を超えるとエラーが発生する.
従って,解決策はleft+(right−lef)/2である.すなわち,左側に2つの間隔の半分を加算する方式を選択してオーバーフロー問題を解決する.
これは長い間誰も気づかなかった間違いにすぎない......ほほほ
ソート配列のターゲット値を検索し、インデックス値を返します.
復帰する
class Solution:
def search(self, nums: List[int], target: int) -> int:
def BS(left, right):
if left > right:
return -1
mid = left + (right - left) // 2
if nums[mid] == target :
return mid
elif nums[mid] > target :
return BS(left, mid-1)
else:
return BS(mid+1, right)
return BS(0, len(nums)-1)
class Solution:
def search(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums)-1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target :
return mid
elif nums[mid] > target :
right = mid -1
else:
left = mid + 1
return -1
バイナリ検索アルゴリズムのエラーバイナリ探索アルゴリズムでは,中値を求める式を(左+右)/2と書く.これは両端のインデックスの平均値を求めて、とても直観的で熟知しています
ただし,資料型では最値が規定されているため,intの最大値が左+右を超えるとエラーが発生する.
従って,解決策はleft+(right−lef)/2である.すなわち,左側に2つの間隔の半分を加算する方式を選択してオーバーフロー問題を解決する.
これは長い間誰も気づかなかった間違いにすぎない......ほほほ
Reference
この問題について([探索バイナリ]Let code 704.Binary Search), 我々は、より多くの情報をここで見つけました https://velog.io/@rmswjdtn/이진탐색-Leet-code-704.-Binary-Searchテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol