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

Python에서 전체 배열을 정렬하도록 정렬하는 최소 길이의 정렬되지 않은 하위 배열을 찾습니다.


크기가 n인 정렬되지 않은 배열 A[0..n-1]이 있다고 가정하면 최소 길이 하위 배열 A[s..e]를 찾아야 합니다. 이 하위 배열 전체 배열이 정렬됩니다. 따라서 배열이 [2,6,4,8,10,9,15]와 같으면 출력은 5가 됩니다. 하위 배열은 [6,4,8,10,9]가 됩니다.

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

  • res :=숫자를 배열로 정렬

  • 답변 :=0

  • r을 연결 목록으로 설정

  • 범위 0에서 res의 길이까지의 i에 대해

    • nums[i]가 res[i]와 같지 않으면 i를 r

      에 삽입합니다.
  • r의 길이가 0이면 0을 반환하고 r의 길이가 1이면 1을 반환

  • r의 마지막 요소 반환 – r + 1의 첫 번째 요소

예시

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

class Solution(object):
   def findUnsortedSubarray(self, nums):
      res = sorted(nums)
      ans = 0
      r = []
      for i in range(len(res)):
         if nums[i] != res[i]:
            r.append(i)
      if not len(r):
         return 0
      if len(r) == 1:
         return 1
      return r[-1]-r[0]+1
ob1 = Solution()
print(ob1.findUnsortedSubarray([2,6,4,8,10,9,15]))

입력

[2,6,4,8,10,9,15]

출력

5