n개의 고유한 값으로 구성된 배열이 있다고 가정합니다. 이 배열이 정렬되어 시계 반대 방향으로 회전했는지 확인해야 합니다. 여기에서는 완전히 정렬된 배열이 정렬 및 회전된 것으로 간주되지 않도록 최소한 한 번의 회전이 필요합니다.
따라서 입력이 nums =[4,5,6,8,1,3]과 같으면 시계 방향으로 두 번 회전할 수 있으므로 출력은 True가 됩니다. 그러면 [1, 3, 4, 5, 6, 8].
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- min_element :=최소 숫자
- min_index :=min_element의 인덱스(숫자)
- before_sorted :=참
- 1에서 min_index - 1까지의 범위에 있는 i에 대해
- 숫자[i] <숫자[i - 1]이면
- before_sorted :=거짓
- 루프에서 나오다
- 숫자[i] <숫자[i - 1]이면
- after_sorted :=참
- min_index + 1 ~ nums - 1 범위의 i에 대해
- 숫자[i] <숫자[i - 1]이면
- after_sorted :=거짓
- 루프에서 나오다
- 숫자[i] <숫자[i - 1]이면
- before_sorted 및 after_sorted가 true이고 nums
- 참 반환
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
def solve(nums): min_element = 999999 min_index = -1 min_element = min(nums) min_index = nums.index(min_element) before_sorted = True for i in range(1, min_index): if nums[i] < nums[i - 1]: before_sorted = False break after_sorted = True for i in range(min_index + 1, len(nums)): if nums[i] < nums[i - 1]: after_sorted = False break if before_sorted and after_sorted and nums[-1] < nums[0]: return True else: return False nums = [4,5,6,8,1,3] print(solve(nums))반환
입력
[4,5,6,8,1,3]
출력
True