고유한 요소가 있는 num이라는 배열이 있다고 가정합니다. 하나의 하위 배열을 뒤집은 후 배열이 정렬되는지 여부를 확인해야 합니다. 배열이 이미 정렬되어 있으면 true도 반환합니다.
따라서 입력이 nums =[4,6,27,25,15,9,37,42]와 같으면 출력은 True가 됩니다. 왜냐하면 [9,15,25,27]을 반대로 하면 배열이 정렬됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- n :=숫자 크기
- 배열에 요소가 하나만 있으면 True를 반환합니다.
- i :=1
- 1 ~ n - 1 범위의 i에 대해
- 숫자[i - 1] <숫자[i]이면
- i가 n과 같으면 true를 반환하고, 그렇지 않으면 루프에서 나옵니다.
- 숫자[i - 1] <숫자[i]이면
- j :=나
- j
- i> 1이고 nums[j]
- j :=j + 1
- i> 1이고 nums[j]
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시 코드
def solve(nums): n = len(nums) if n == 1: return True i = 1 for i in range(1, n): if nums[i - 1] < nums[i] : if i == n: return True else: break j = i while j < n and nums[j] < nums[j - 1]: if i > 1 and nums[j] < nums[i - 2]: return False j += 1 if j == n: return True k = j if nums[k] < nums[i - 1]: return False while k > 1 and k < n: if nums[k] < nums[k - 1]: return False k += 1 return True nums = [4,6,27,25,15,9,37,42] print(solve(nums))
입력
[4,6,27,25,15,9,37,42]
출력
True