회전된 정렬된 배열에서 검색 II
nums
이 있습니다(반드시 고유 값이 있는 것은 아님).함수에 전달되기 전에
nums
는 알 수 없는 피벗 인덱스k
(0 <= k < nums.length
)에서 회전되어 결과 배열이 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(인덱스 0)가 됩니다. 예를 들어 [0,1,2,4,4,4,5,6,6,7]
는 피벗 인덱스 5
에서 회전하여 [4,5,6,6,7,0,1,2,4,4]
가 될 수 있습니다.회전 후 배열
nums
과 정수 target
가 주어지면 true
가 target
에 있으면 nums
를 반환하고, false
에 없으면 nums
를 반환합니다.전체 작업 단계를 최대한 줄여야 합니다.
예 1:
입력: 숫자 = [2,5,6,0,0,1,2], 대상 = 0
출력: 참
예 2:
입력: 숫자 = [2,5,6,0,0,1,2], 대상 = 3
출력: 거짓
제약:
1 <= nums.length <= 5000
-104 <= nums[i] <= 104
nums
는 특정 피벗에서 회전하도록 보장됩니다. -104 <= target <= 104
후속 조치: 이 문제는 와 유사하지만
nums
에 중복이 포함될 수 있습니다. 이것이 런타임 복잡성에 영향을 줍니까? 어떻게 그리고 왜?해결책:
class Solution:
def search(self, nums: List[int], target: int) -> bool:
# Initilize two pointers
begin = 0
end = len(nums) - 1
while begin <= end:
mid = (begin + end)//2
if nums[mid] == target:
return True
if nums[mid] == nums[end]: # Fail to estimate which side is sorted
end -= 1 # In worst case: O(n)
elif nums[mid] > nums[end]: # Left side of mid is sorted
if nums[begin] <= target and target < nums[mid]: # Target in the left side
end = mid - 1
else: # in right side
begin = mid + 1
else: # Right side is sorted
if nums[mid] < target and target <= nums[end]: # Target in the right side
begin = mid + 1
else: # in left side
end = mid - 1
return False
Reference
이 문제에 관하여(회전된 정렬된 배열에서 검색 II), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/search-in-rotated-sorted-array-ii-557c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)