Algorithm
Problem Name: 1144. Decrease Elements To Make Array Zigzag
Problem Link: https://leetcode.com/problems/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 &
Try With Live Editor
Input
Output
#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 &
Try With Live Editor
Input
Output