https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
Find First and Last Position of Element in Sorted Array - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제 소개
- target과 동일한 숫자가 nums 배열안에 있다면, 그 숫자의 시작과 끝 index를 반환, 없다면 [-1,-1]를 반환하는 문제
- O(log n)의 시간복잡도 제한이 걸려있다. (정답은 시간제한을 일부 통과해도 되는 거 같다.)
- binary search(이진 탐색) 알고리즘을 사용한다.
Binary Search Code
class Solution(object):
def searchRange(self, nums, target):
if not nums:
return [-1,-1]
start = 0
end = len(nums) -1
while start < end:
mid = int((start+ end)//2)
if nums[mid] == target:
start = mid
end = mid
elif nums[mid] < target:
start = mid + 1
else:
end = mid
if start == end and nums[start] != target:
return [-1,-1]
for i in range(start,-1,-1):
if nums[i] == target:
start = i
else:
break
for i in range(end,len(nums)):
if nums[i] == target:
end = i
else:
break
return [start,end]
- 정석적인 이진탐색 코드를 사용하여 O(log n)을 만족하였습니다.
- if not nums 은 빈 nums에 대한 예외처리를 진행합니다.
- target이 만약 없을 경우, while문 이후 중앙으로 수렴합니다. 이 때, start== end이고 nums[start] != target이라면 값이 없는 것이므로 [-1,-1]을 반환하도록 코드를 작성했습니다.
'TIL > 이전 풀이' 카테고리의 다른 글
| [python] Leetcode 79. Word Search (1) | 2022.12.13 |
|---|---|
| [python] Leetcode 54. Spiral Matrix (0) | 2022.12.13 |
| [python] Leetcode 15. 3Sum (1) | 2022.12.13 |
| BOJ_12904: A와 B (0) | 2022.10.31 |
| boj_2839_설탕 배달 (0) | 2022.10.24 |