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

x
+
cmd
nums = [1,2,3]

Output

x
+
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 & Try With Live Editor

Input

x
+
cmd
nums = [1,2,3]

Output

x
+
cmd
2
Advertisements

Demonstration


Previous
#1143 Leetcode Longest Common Subsequence Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#1145 Leetcode Binary Tree Coloring Game Solution in C, C++, Java, JavaScript, Python, C# LeetcodeProblem Name: