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

Python에서 배열을 지그재그로 만들기 위해 요소 줄이기


정수 배열이 있다고 가정하고 이동 작업은 실제로 임의의 요소를 선택하고 1만큼 줄이는 것입니다. 배열 A는 1 또는 2가 충족되는 경우 지그재그 배열입니다 −

  • 모든 짝수 인덱스 요소는 인접한 요소보다 큽니다. A[0]> A[1] A[3] ... 등등.

  • 모든 홀수 인덱스 요소는 인접한 요소보다 큽니다. A[0] A[2] A[4] <... 등등.

주어진 배열 숫자를 지그재그 배열로 변환하려면 최소 이동 횟수를 찾아야 합니다.

따라서 배열이 [1,2,3]과 같으면 2를 0으로 또는 3을 1로 줄일 수 있으므로 출력은 2가 됩니다.

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

  • solve()라는 메서드를 정의하면 숫자가 필요하고 시작되며 아래와 같이 작동합니다. -

  • k :=0

  • 범위 시작에서 숫자 길이까지의 i에 대해 2만큼 증가

    • 왼쪽 :=i – 1 <0일 때 100000, 그렇지 않으면 nums[i - 1]

    • right :=i + 1일 때 100000>=nums의 길이, 그렇지 않으면 nums[i + 1]

    • temp :=(왼쪽과 오른쪽의 최소값) – 1 – nums[i]

    • temp <0이면 k :=k + |temp|

  • k를 반환

  • 주요 방법에서는

  • ans :=해결(숫자, 0)

  • ans :=ans 및 solve(nums, 1)의 최소값

  • 반환

예제(파이썬)

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

class Solution(object):
   def solve(self,nums,start):
      k = 0
      for i in range(start,len(nums),2):
         left = 100000 if i-1<0 else nums[i-1]
         right = 10000 if i+1>=len(nums) else nums[i+1]
         temp= (min(left,right)-1 - nums[i])
         if temp<0:
            k+=abs(temp)
      return k
   def movesToMakeZigzag(self, nums):
      ans = self.solve(nums,0)
      ans = min(ans,self.solve(nums,1))
      return ans
ob = Solution()
print(ob.movesToMakeZigzag([1,2,3]))

입력

[1,2,3]

출력

2