정수 배열이 있다고 가정하고 이동 작업은 실제로 임의의 요소를 선택하고 1만큼 줄이는 것입니다. 배열 A는 1 또는 2가 충족되는 경우 지그재그 배열입니다 −
-
모든 홀수 인덱스 요소는 인접한 요소보다 큽니다. 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