Related Articles
Minimum increments of Non-Decreasing Subarrays required to make Array Non-Decreasing
• Last Updated : 24 Aug, 2020

Given an array arr[] consisting of N integers, the task is to find the minimum number of operations required to make array non-decreasing, where, each operation involves incrementing all elements of a non-decreasing subarray from the given array by 1.

Examples:

Input: arr[] = {1, 3, 1, 2, 4}
Output:
Explanation:
Operation 1: Incrementing arr modifies array to {1, 3, 2, 2, 4}
Operation 2: Incrementing subarray {arr, arr} modifies array to {1, 3, 3, 3, 4}
Therefore, the final array is non-decreasing.

Input: arr[] = {1, 3, 5, 10}
Output:
Explanation: The array is already non-decreasing.

Approach: Follow the steps below to solve the problem:

• If the array is already a non-decreasing array, then no changes required.
• Otherwise, for any index i where 0 ≤ i < N, if arr[i] > arr[i+1], add the difference to ans.
• Finally print ans as the answer.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;`` ` `// Function to return to the minimum``// number of operations required to``// make the array non-decreasing``int` `getMinOps(``int` `arr[], ``int` `n)``{``     ` `    ``// Stores the count of operations``    ``int` `ans = 0;``    ``for``(``int` `i = 0; i < n - 1; i++)``    ``{`` ` `        ``// If arr[i] > arr[i + 1], add``        ``// arr[i] - arr[i + 1] to the answer``        ``// Otherwise, add 0``        ``ans += max(arr[i] - arr[i + 1], 0);``    ``}``    ``return` `ans;``}`` ` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 1, 3, 1, 2, 4 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``     ` `    ``cout << (getMinOps(arr, n));``}`` ` `// This code is contributed by PrinciRaj1992`

## Java

 `// Java Program to implement the``// above approach``import` `java.io.*;``import` `java.util.*;`` ` `class` `GFG {`` ` `    ``// Function to return to the minimum``    ``// number of operations required to``    ``// make the array non-decreasing``    ``public` `static` `int` `getMinOps(``int``[] arr)``    ``{``        ``// Stores the count of operations``        ``int` `ans = ``0``;``        ``for` `(``int` `i = ``0``; i < arr.length - ``1``; i++) {`` ` `            ``// If arr[i] > arr[i + 1], add``            ``// arr[i] - arr[i + 1] to the answer``            ``// Otherwise, add 0``            ``ans += Math.max(arr[i] - arr[i + ``1``], ``0``);``        ``}`` ` `        ``return` `ans;``    ``}`` ` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int``[] arr = { ``1``, ``3``, ``1``, ``2``, ``4` `};`` ` `        ``System.out.println(getMinOps(arr));``    ``}``}`

## Python3

 `# Python3 program to implement``# the above approach`` ` `# Function to return to the minimum ``# number of operations required to``# make the array non-decreasing``def` `getMinOps(arr):`` ` `    ``# Stores the count of operations``    ``ans ``=` `0``     ` `    ``for` `i ``in` `range``(``len``(arr) ``-` `1``):`` ` `        ``# If arr[i] > arr[i + 1], add``        ``# arr[i] - arr[i + 1] to the answer``        ``# Otherwise, add 0``        ``ans ``+``=` `max``(arr[i] ``-` `arr[i ``+` `1``], ``0``)`` ` `    ``return` `ans`` ` `# Driver Code`` ` `# Given array arr[]``arr ``=` `[ ``1``, ``3``, ``1``, ``2``, ``4` `]`` ` `# Function call``print``(getMinOps(arr))`` ` `# This code is contributed by Shivam Singh`

## C#

 `// C# Program to implement the``// above approach``using` `System;``class` `GFG``{`` ` `  ``// Function to return to the minimum``  ``// number of operations required to``  ``// make the array non-decreasing``  ``public` `static` `int` `getMinOps(``int``[] arr)``  ``{``    ``// Stores the count of operations``    ``int` `ans = 0;``    ``for` `(``int` `i = 0; i < arr.Length - 1; i++) ``    ``{`` ` `      ``// If arr[i] > arr[i + 1], add``      ``// arr[i] - arr[i + 1] to the answer``      ``// Otherwise, add 0``      ``ans += Math.Max(arr[i] - arr[i + 1], 0);``    ``}``    ``return` `ans;``  ``}`` ` `  ``// Driver Code``  ``public` `static` `void` `Main(String[] args)``  ``{``    ``int``[] arr = { 1, 3, 1, 2, 4 };`` ` `    ``Console.WriteLine(getMinOps(arr));``  ``}``}`` ` `// This code is contributed by Amit Katiyar`
Output:
```2
```

Time Complexity: O(N)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up