[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.