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

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]
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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[0]); ` ` `  `    ``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

 ` `

Output:

```4
```

Time Complexity: O(NlogN)

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.