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 <bits/stdc++.h> 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
<?php // PHP implementation of the above approach // Function to find the minimum operations function minimumMoves( $a , $n ) { $operations = 0; // Sort the given array sort( $a ); // Count operations by assigning // a[i] = i+1 for ( $i = 0; $i < $n ; $i ++) $operations += abs ( $a [ $i ] - ( $i + 1)); return $operations ; } // Driver Code $arr = array ( 5, 3, 2 ); $n = sizeof( $arr ); echo minimumMoves( $arr , $n ); // This code is contributed by ajit ?> |
Javascript
<script> // Javascript implementation of the above approach // Function to find the minimum operations function minimumMoves(a, n) { let operations = 0; // Sort the given array a.sort(); // Count operations by assigning // a[i] = i+1 for (let i = 0; i < n; i++) operations += Math.abs(a[i] - (i + 1)); return operations; } // Driver code let arr = [ 5, 3, 2 ]; let n = arr.length; document.write(minimumMoves(arr, n)); // This code is contributed by divyesh072019 </script> |
4
Complexity Analysis:
- Time Complexity: O(NlogN)
- Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!