Open seungriyou opened 8 months ago
https://leetcode.com/problems/search-in-rotated-sorted-array/
기본적으로 정렬되어 있는 배열이며, O(logn) time으로 동작해야 하므로 binary search로 접근한다.
O(logn)
오름차순으로 정렬된 배열이 rotate 되어 있으므로, mid의 원소뿐만 아니라 left 혹은 right의 원소와도 비교해야 한다. (나는 right와 비교)
mid
left
right
left <= right 동안 동작하는 과정은 다음과 같다.
left <= right
nums[mid] == target이라면, mid를 반환한다.
nums[mid] == target
nums[mid] <= nums[right]라면, mid 기준 오른쪽(mid ~ right)이 정렬된 것이다.
nums[mid] <= nums[right]
target
mid + 1
mid - 1
아니라면, mid 기준 왼쪽(left ~ mid)이 정렬된 것이다.
만약, left <= right이 더이상 아니게 되면, target이 존재하지 않는다는 것이므로 -1을 반환한다.
-1
O(1)
Approach
기본적으로 정렬되어 있는 배열이며,
O(logn)
time으로 동작해야 하므로 binary search로 접근한다.오름차순으로 정렬된 배열이 rotate 되어 있으므로,
mid
의 원소뿐만 아니라left
혹은right
의 원소와도 비교해야 한다. (나는right
와 비교)left <= right
동안 동작하는 과정은 다음과 같다.nums[mid] == target
이라면,mid
를 반환한다.nums[mid] <= nums[right]
라면,mid
기준 오른쪽(mid
~right
)이 정렬된 것이다.target
이 위치한다면,left
를mid + 1
로 변경한다.right
를mid - 1
로 변경한다.아니라면,
mid
기준 왼쪽(left
~mid
)이 정렬된 것이다.target
이 위치한다면,right
를mid - 1
로 변경한다.left
를mid + 1
로 변경한다.만약,
left <= right
이 더이상 아니게 되면,target
이 존재하지 않는다는 것이므로-1
을 반환한다.Complexity
O(logn)
O(1)