회전 정렬 그룹에서 최소값을 찾습니다
(즉, [0,1,2,4,5,6,7]는 [4,5,6,7,0,1,2]로 변할 수 있다).
최소 요소를 찾습니다.
배열에 중복 항목이 존재하지 않는다고 가정할 수 있습니다 *
예를 들면 -
"""
입력:[3,4,5,1,2]
산출: 1
"""
솔루션 -
가장 간단한 방법은 그룹을 교체해서 최소값을 찾는 것이다.
return min(arr)
이것은 O(n)시간이 필요하다.더 좋은 방법은 2진 검색 알고리즘을 사용하는 것이다.
이곳의 직감은--**
패턴이 피봇 주위를 회전합니다.따라서 만약 우리가 축의 왼쪽에 있다면 값은 항상 축 오른쪽의 값보다 크다.그래서 우리는 오른쪽으로 가기로 결정할 수 있다.
마찬가지로 축의 오른쪽에 있으면 값이 축의 왼쪽보다 작거나 맨 오른쪽보다 작습니다.
**
만약 우리가 추축에 있다면 그것은 다음과 같은 조건을 만족시킬 것이다.
arr[pivot-1] < arr[pivot] < arr[pivot + 1]
따라서 상술한 직감을 이용하여 우리는 다음과 같은 해결 방안을 얻어냈다.def findMin(self, nums: List[int]) -> int:
arr = nums
lo = 0
hi = len(arr) - 1
while lo <= hi:
mid = (lo + hi) // 2
if lo == hi:
return arr[lo]
if arr[0] < arr[mid] < arr[hi]:
return arr[0]
if arr[mid-1] > arr[mid] and arr[mid] < arr[mid+1]:
return arr[mid]
else:
if arr[mid] > arr[hi] :
lo = mid + 1
else:
hi = mid - 1
Reference
이 문제에 관하여(회전 정렬 그룹에서 최소값을 찾습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/skbhagat40/finding-minimum-in-rotated-sorted-array-3002텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)