Post

[LeetCode] 704. Binary Search

Question.

Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.

You must write an algorithm with O(log n) runtime complexity.

Example 1:

1
2
3
Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4

Example 2:

1
2
3
Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1

Constraints:

1
2
3
4
1 <= nums.length <= 104
-104 < nums[i], target < 104
All the integers in nums are unique.
nums is sorted in ascending order.

My Solution

이분탐색(Binary Search)

  • 정렬된 리스트에서 탐색 범위를 절반씩 줄여가며 타겟값을 찾는 알고리즘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        start = 0
        end = len(nums) - 1

        while start <= end:
            mid = (start + end) // 2
            if nums[mid] == target:
                return mid
            elif nums[mid] > target:
                end = mid - 1
            else:
                start = mid + 1
        return -1        

반복문으로 구현하였음. 현재 가리키는 값이 타겟값보다 큰 경우 end 값을 가리키는 값보다 작게 하고, 절반을 줄여 탐색한다. 타겟값보다 작은 경우는 반대로 생각한다.

This post is licensed under CC BY 4.0 by the author.