leetcode 검 지 Offer 11. 회전 배열 의 최소 숫자
예시 1:
입력: [3, 4, 5, 1, 2] 출력: 1 예시 2:
입력: [2, 2, 2, 0, 1] 출력: 0
이 문 제 는 주로 이분법 을 고찰 하려 고 하 는데, 이곳 의 이분법 은 이전의 것 과 또 약간 다르다.아래 의 분석 을 통 해 힘 이 큰 사람의 해석 을 막는다.
순환 2 분: 설정 i, j 지침 은 각각 numbers 배열 좌우 양쪽 을 가리 키 며 m = (i + j) / / 2 는 매번 2 분 의 중심 점 ("/ /" 은 아래로 나 누 는 방법 을 대표 하기 때문에 i ≤ m 가 항상 있 습 니 다.
예 [1, 0, 1, 1, 1]: 회전 점 x = 1, 따라서 m = 2 는 오른쪽 정렬 배열 에 있 습 니 다. 예 [1, 1, 1, 0, 1]: 회전 점 x = 3, 따라서 m = 2 는 왼쪽 정렬 배열 에 있 습 니 다.
여기 서 right 를 1 로 줄 이 는 것 은 경 계 를 줄 이 는 것 과 같 습 니 다. 매번 한 자 리 를 줄 이 고 오른쪽 에 있 는 중복 숫자 를 제외 할 때 까지 합 니 다.
작성 자: jyd 링크:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/mian-shi-ti-11-xuan-zhuan-shu-zu-de-zui-xiao-shu-3/ 출처: 리 트 코드 (LeetCode) 저작권 은 작가 에 게 있 습 니 다. 상업 전 재 는 작가 에 게 연락 하여 권한 을 수 여 받 으 십시오. 비 상업 전 재 는 출처 를 밝 혀 주 십시오.
class Solution:
def minArray(self, numbers: List[int]) -> int:
if not numbers: return
left, right = 0 , len(numbers)-1
while left < right:# , , > ,
mid = (left + right) // 2
# print(left, mid,right)
if numbers[mid] > numbers[right]:
left = mid + 1
elif numbers[mid] < numbers[right]:
right = mid
else:#
right -= 1
return numbers[left]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0부터 시작하는 LeetCode Day8 「1302. Deepest Leaves Sum」해외에서는 엔지니어의 면접에 있어서 코딩 테스트라고 하는 것이 행해지는 것 같고, 많은 경우, 특정의 함수나 클래스를 주제에 따라 실장한다고 하는 것이 메인이다. 빠른 이야기가 본고장에서도 행해지고 있는 것 같은 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.