Description
There is an integer array nums sorted in ascending order (with distinct values).
Prior to being passed to your function, nums is possibly rotated at an unknown pivot index k (1 <= k < nums.length) such that the resulting array is [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (0-indexed). For example, [0,1,2,4,5,6,7] might be rotated at pivot index 3 and become [4,5,6,7,0,1,2].
Given the array nums after the possible rotation and an integer target, return the index of target if it is in nums, or -1 if it is not in nums.
You must write an algorithm with O(log n) runtime complexity.
My solution
class Solution:
def search(self, nums: List[int], target: int) -> int:
pivot = nums.index(min(nums))
left = 0
right = len(nums) - 1
if (target > max(nums)) or (target < min(nums)):
return -1
elif len(nums) == 1:
return 0 if nums[0] == target else -1
elif len(nums) >= 2:
nums.sort()
while (left <= right):
mid = (left + right) // 2
if nums[mid] > target:
right = mid - 1
elif nums[mid] < target:
left = mid + 1
else:
break
return (mid + pivot) % len(nums) if left <= right else -1
문제 출처 : https://leetcode.com/problems/search-in-rotated-sorted-array/
'Algorithm > Daily Coding Tests Challenge' 카테고리의 다른 글
[Leetcode] Median : Find First and Last Position of Element in Sorted Array (0) | 2021.10.09 |
---|---|
[Leetcode] Hard : Median of Two Sorted Array (0) | 2021.10.09 |
[Leetcode] Easy: Valid Anagram (0) | 2021.09.15 |
[프로그래머스] level2. 가장 큰 수 (0) | 2021.09.15 |
[프로그래머스] level2. H-Index (0) | 2021.09.13 |