[LeetCode] 0153. 회전정렬 배열에서 최소값 찾기

회전 정렬 배열에서 최소값 찾기

Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크

중간


길이의 배열을 가정 N 오름차순으로 정렬된 것은 회전 ~ 사이 1 그리고 N 예를 들어 배열입니다. 숫자 = [0,1,2,4,5,6,7] 다음과 같이 될 수 있습니다:

  • [4,5,6,7,0,1,2] 회전했다면 4 타임스.
  • [0,1,2,4,5,6,7] 회전했다면 7 타임스.

주목하세요 회전 배열 [a[0], a[1], a[2], ..., a[n-1]] 1회 결과가 배열에 포함됨 [a[n-1], a[0], a[1], a[2], ..., a[n-2]].

정렬된 회전 배열이 주어지면 숫자 ~의 고유한 요소, 반환 이 배열의 최소 요소.

다음에서 실행되는 알고리즘을 작성해야 합니다. O(log n) 시간입니다.

 

예시 1:

입력: 숫자 = [3,4,5,1,2]
산출: 1
설명: 원래 배열은 [1,2,3,4,5] 3번 회전되었습니다.

예 2:

입력: 숫자 = [4,5,6,7,0,1,2]
산출: 0
설명: 원래 배열은 [0,1,2,4,5,6,7]이었고 4번 회전되었습니다.

예시 3:

입력: 숫자 = [11,13,15,17]
산출: 11
설명: 원래 배열은 [11,13,15,17]이었고 4번 회전되었습니다. 

 

제약:

  • n == 숫자.길이
  • 1 <= n <= 5000
  • -5000 <= 숫자[i] <= 5000
  • 모든 정수 숫자 ~이다 고유한.
  • 숫자 사이에서 정렬되고 회전됩니다. 1 그리고 N 타임스.

파이썬

				
					# 시간 복잡도: O(logn) # 공간 복잡도: O(1) import List 클래스 입력 시 솔루션: def findMin(self, nums: List[int]) -> int: if len(nums) == 1: return nums [0] left, right = 0, len(nums) - 1 if nums[right] > nums[0]: return nums[0] while left <= right: mid = left + (right - left) // 2 if nums[mid] > nums[mid + 1]: nums[mid] < nums[mid - 1]인 경우 nums[mid+1] 반환: nums[mid] > nums[-1]인 경우 nums[mid] 반환: 왼쪽 = mid + 1 else: right = mid - 1 return nums[mid] nums = [11, 13, 15, 17] print(Solution().findMin(nums))
				
			
ko_KR한국어