# Minimum number of increment/decrement operations such that array contains all elements from 1 to N

• Difficulty Level : Basic
• Last Updated : 11 Jul, 2022

Given an array of N elements, the task is to convert it into a permutation (Each number from 1 to N occurs exactly once) by using the following operations a minimum number of times:

• Increment any number.
• Decrement any number.

Examples:

```Input: arr[] = {1, 1, 4}
Output: 2
The array can be converted into [1, 2, 3]
by adding 1 to the 1st index i.e. 1 + 1 = 2
and decrementing 2nd index by 1 i.e. 4- 1 = 3

Input: arr[] = {3, 0}
Output: 2

The array can be converted into [2, 1]```

Approach: To minimize the number of moves/operations, sort the given array and make a[i] = i+1 (0-based) which will take abs(i+1-a[i]) no. of operations for each element.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the above approach``#include ``using` `namespace` `std;` `// Function to find the minimum operations``long` `long` `minimumMoves(``int` `a[], ``int` `n)``{` `    ``long` `long` `operations = 0;` `    ``// Sort the given array``    ``sort(a, a + n);` `    ``// Count operations by assigning a[i] = i+1``    ``for` `(``int` `i = 0; i < n; i++)``        ``operations += ``abs``(a[i] - (i + 1));` `    ``return` `operations;``}` `// Driver Code``int` `main()``{``    ``int` `arr[] = { 5, 3, 2 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);` `    ``cout << minimumMoves(arr, n);` `    ``return` `0;``}`

## Java

 `// Java implementation of the above approach` `import` `java.util.*;``class` `solution``{``// Function to find the minimum operations``static` `long` `minimumMoves(``int` `a[], ``int` `n)``{`` ` `    ``long` `operations = ``0``;`` ` `    ``// Sort the given array``    ``Arrays.sort(a);`` ` `    ``// Count operations by assigning a[i] = i+1``    ``for` `(``int` `i = ``0``; i < n; i++)``        ``operations += (``long``)Math.abs(a[i] - (i + ``1``));`` ` `    ``return` `operations;``}`` ` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``int` `arr[] = { ``5``, ``3``, ``2` `};``    ``int` `n = arr.length;`` ` `    ``System.out.print(minimumMoves(arr, n));` `}` `}``//contributed by Arnab Kundu`

## Python3

 `# Python 3 implementation of the above approach` `# Function to find the minimum operations``def` `minimumMoves(a, n):``    ` `    ``operations ``=` `0``    ``# Sort the given array``    ``a.sort(reverse ``=` `False``)``    ` `    ``# Count operations by assigning a[i] = i+1``    ``for` `i ``in` `range``(``0``,n,``1``):``        ``operations ``=` `operations ``+` `abs``(a[i] ``-` `(i ``+` `1``))` `    ``return` `operations` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``arr ``=` `[ ``5``, ``3``, ``2` `]``    ``n ``=` `len``(arr)` `    ``print``(minimumMoves(arr, n))` `# This code is contributed by``# Surendra_Gangwar`

## C#

 `// C# implementation of the above approach``using` `System;` `class` `GFG``{``// Function to find the minimum operations``static` `long` `minimumMoves(``int` `[]a, ``int` `n)``{` `    ``long` `operations = 0;` `    ``// Sort the given array``    ``Array.Sort(a);` `    ``// Count operations by assigning``    ``// a[i] = i+1``    ``for` `(``int` `i = 0; i < n; i++)``        ``operations += (``long``)Math.Abs(a[i] - (i + 1));` `    ``return` `operations;``}` `// Driver Code``static` `public` `void` `Main ()``{``    ``int` `[]arr = { 5, 3, 2 };``    ``int` `n = arr.Length;``    ` `    ``Console.WriteLine(minimumMoves(arr, n));``}``}` `// This code is contributed by Sach_Code`

## PHP

 ``

## Javascript

 ``

Output:

`4`

Time Complexity: O(NlogN)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up