Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 허용되는 인접 항목의 조건부 스와핑을 사용하여 배열을 정렬할 수 있는지 확인

<시간/>

nums라고 하는 정렬되지 않은 숫자 배열이 있고 모든 요소가 0에서 n-1 사이의 범위에 있다고 가정합니다. num의 인접한 요소를 필요한 만큼 교체할 수 있지만 이러한 요소 간의 절대 차이가 1일 때만 가능합니다. num을 정렬할 수 있는지 여부를 확인해야 합니다.

따라서 입력이 nums =[1, 0, 3, 2, 5, 4]와 같으면 이러한 쌍 [(1, 0), (3, 2), (5 , 4)] [0, 1, 2, 3, 4, 5]를 정렬합니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 0에서 nums - 2 크기의 범위에 있는 i에 대해
    • 숫자[i]> 숫자[i+1]이면
      • nums[i] - nums[i+1]이 1과 같으면
        • 숫자[i]와 숫자[i+1] 교환
      • 그렇지 않으면
        • 거짓을 반환
  • 참 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(nums):
   for i in range(len(nums) - 1):
      if nums[i] > nums[i+1]:
         if nums[i] - nums[i+1] == 1:
            nums[i], nums[i+1] = nums[i+1], nums[i]
         else:
            return False
   return True
nums = [1, 0, 3, 2, 5, 4]
print(solve(nums))

입력

[1, 0, 3, 2, 5, 4]

출력

True