binary search (문제풀이 정리 필요)

이진 탐색

참고 : https://leetcode.com/explore/learn/card/binary-search

개념

종료 조건

Distinguishing Syntax:

Initial Condition: left = 0, right = length-1
Termination: left > right
Searching Left: right = mid-1
Searching Right: left = mid+1

구현


def search(nums: [int], target: int) -> int:
    """
    재귀함수 사용하지 않음.
    """
    start_index = 0
    end_index = len(nums) - 1

    while (start_index <= end_index):
        mid_index = (start_index + end_index) // 2
        compare_index = nums[mid_index]

        if compare_index == target:
            return mid_index

        elif compare_index > target:
            end_index = mid_index - 1

        elif compare_index < target:
            start_index = mid_index + 1

    return -1


def search_recursive(nums: [int], target: int, start_index: int, end_index: int) -> int:
    """
    재귀함수 사용
    """
    if start_index > end_index:
        return -1

    mid_index = (start_index + end_index) // 2

    if nums[mid_index] == target:
        return mid_index

    elif nums[mid_index] > target:
        end_index = mid_index - 1
        return search_recursive(nums, target, start_index, end_index)

    elif nums[mid_index] < target:
        start_index = mid_index + 1
        return search_recursive(nums, target, start_index, end_index)

TODO 문제 푸는 거 추가하기!