## Algorithm

Problem Name: 1144. Decrease Elements To Make Array Zigzag

Given an array `nums` of integers, a move consists of choosing any element and decreasing it by 1.

An array `A` is a zigzag array if either:

• Every even-indexed element is greater than adjacent elements, ie. `A[0] > A[1] < A[2] > A[3] < A[4] > ...`
• OR, every odd-indexed element is greater than adjacent elements, ie. `A[0] < A[1] > A[2] < A[3] > A[4] < ...`

Return the minimum number of moves to transform the given array `nums` into a zigzag array.

Example 1:

```Input: nums = [1,2,3]
Output: 2
Explanation: We can decrease 2 to 0 or 3 to 1.
```

Example 2:

```Input: nums = [9,6,1,6,2]
Output: 4
```

Constraints:

• `1 <= nums.length <= 1000`
• `1 <= nums[i] <= 1000`

## Code Examples

### #1 Code Example with Java Programming

```Code - Java Programming```

``````
class Solution {
public int movesToMakeZigzag(int[] nums) {
return Math.min(calculateMove(nums, true), calculateMove(nums, false));
}

private int calculateMove(int[] nums, boolean isEven) {
int count = 0;

for (int i = (isEven ? 0 : 1); i  <  nums.length; i += 2) {
int curr = 0;
if (i + 1  <  nums.length) {
if (nums[i] >= nums[i + 1]) {
curr = nums[i] - nums[i + 1] + 1;
}
}

if (i - 1 >= 0) {
if (nums[i] >= nums[i - 1]) {
curr = Math.max(curr, nums[i] - nums[i - 1] + 1);
}
}

count += curr;
}

return count;
}
}
``````
Copy The Code &

Input

cmd
nums = [1,2,3]

Output

cmd
2

### #2 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def movesToMakeZigzag(self, N: List[int]) -> int:
moves = [max(0, N[i] - min(N[i-1:i] + N[i+1:i+2]) + 1) for i in range(len(N))]
return min(sum(moves[::2]), sum(moves[1::2]))
``````
Copy The Code &

Input

cmd
nums = [1,2,3]

Output

cmd
2