회전 정렬된 배열에서 검색
nums
이 있습니다.함수에 전달되기 전에
nums
는 알 수 없는 피벗 인덱스k
(1 <= k < nums.length
)에서 회전하여 결과 배열이 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(인덱스 0)가 될 수 있습니다. 예를 들어 [0,1,2,4,5,6,7]
는 피벗 인덱스 3
에서 회전하여 [4,5,6,7,0,1,2]
가 될 수 있습니다.가능한 회전 후 배열
nums
및 정수 target
가 주어지면 target
에 있는 경우 nums
의 인덱스를 반환하고 -1
에 없는 경우 nums
의 인덱스를 반환합니다.런타임 복잡도
O(log n)
로 알고리즘을 작성해야 합니다.예 1:
입력: 숫자 = [4,5,6,7,0,1,2], 대상 = 0
출력: 4
예 2:
입력: 숫자 = [4,5,6,7,0,1,2], 대상 = 3
출력: -1
예 3:
입력: 숫자 = [1], 대상 = 0
출력: -1
제약:
1 <= nums.length <= 5000
-104 <= nums[i] <= 104
nums
의 모든 값은 고유합니다. nums
는 회전 가능한 오름차순 배열입니다. -104 <= target <= 104
해결책:
class Solution:
def getPivot(self, nums):
n = len(nums)
beg = 0
end = n
while beg <= end:
mid = (beg + end) // 2
if mid < n - 1 and nums[mid] > nums[mid + 1]:
return mid + 1
if beg >= end - 1:
return 0
elif nums[mid] > nums[0]:
beg = mid
else:
end = mid
def binarySearch(self, nums, beg, end, target):
while beg <= end:
mid = (beg + end) // 2
if mid >= end:
break
elif nums[mid] == target:
return mid
elif beg == end:
break
elif nums[mid] > target:
end = mid
else:
beg = mid + 1
return -1
def search(self, nums: List[int], target: int) -> int:
n = len(nums)
k = self.getPivot(nums)
left = self.binarySearch(nums, 0, k, target)
if left != -1:
return left
right = self.binarySearch(nums, k, n, target)
if right != -1:
return right
return -1
Reference
이 문제에 관하여(회전 정렬된 배열에서 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/search-in-rotated-sorted-array-2gde텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)