# Change the array into a permutation of numbers from 1 to n

Given an array A of n elements. We need to change the array into a permutation of numbers from 1 to n using minimum replacements in the array.

Examples:

Input : A[] = {2, 2, 3, 3} Output : 2 1 3 4Explanation:To make it a permutation of 1 to 4, 1 and 4 are missing from the array. So replace 2, 3 with 1 and 4. Input : A[] = {1, 3, 2} Output : 1 3 2 Input : A[] = {10, 1, 2} Output : 3 1 2

**Approach:**Observe that we don’t need to change the numbers which are in the range [1, n] and which are distinct(has only one occurrence). So, we use a greedy approach. If we meet the number we have never met before and this number is between 1 and n, we leave this number unchanged. And remove the duplicate elements and add the missing elements in the range [1, n]. Also replace the numbers, not in the range.

## C++

`// CPP program to make a permutation of numbers ` `// from 1 to n using minimum changes. ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `void` `makePermutation(` `int` `a[], ` `int` `n) ` `{ ` ` ` `// Store counts of all elements. ` ` ` `unordered_map<` `int` `, ` `int` `> count; ` ` ` `for` `(` `int` `i = 0; i < n; i++) ` ` ` `count[a[i]]++; ` ` ` ` ` `int` `next_missing = 1; ` ` ` `for` `(` `int` `i = 0; i < n; i++) { ` ` ` `if` `(count[a[i]] != 1 || a[i] > n || a[i] < 1) { ` ` ` `count[a[i]]--; ` ` ` ` ` `// Find next missing element to put ` ` ` `// in place of current element. ` ` ` `while` `(count.find(next_missing) != count.end()) ` ` ` `next_missing++; ` ` ` ` ` `// Replace with next missing and insert the ` ` ` `// missing element in hash. ` ` ` `a[i] = next_missing; ` ` ` `count[next_missing] = 1; ` ` ` `} ` ` ` `} ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `int` `A[] = { 2, 2, 3, 3 }; ` ` ` `int` `n = ` `sizeof` `(A) / ` `sizeof` `(A[0]); ` ` ` `makePermutation(A, n); ` ` ` `for` `(` `int` `i = 0; i < n; i++) ` ` ` `cout << A[i] << ` `" "` `; ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 code to make a permutation ` `# of numbers from 1 to n using ` `# minimum changes. ` ` ` `def` `makePermutation (a, n): ` ` ` ` ` `# Store counts of all elements. ` ` ` `count ` `=` `dict` `() ` ` ` `for` `i ` `in` `range` `(n): ` ` ` `if` `count.get(a[i]): ` ` ` `count[a[i]] ` `+` `=` `1` ` ` `else` `: ` ` ` `count[a[i]] ` `=` `1` `; ` ` ` ` ` `next_missing ` `=` `1` ` ` `for` `i ` `in` `range` `(n): ` ` ` `if` `count[a[i]] !` `=` `1` `or` `a[i] > n ` `or` `a[i] < ` `1` `: ` ` ` `count[a[i]] ` `-` `=` `1` ` ` ` ` `# Find next missing element to put ` ` ` `# in place of current element. ` ` ` `while` `count.get(next_missing): ` ` ` `next_missing` `+` `=` `1` ` ` ` ` `# Replace with next missing and ` ` ` `# insert the missing element in hash. ` ` ` `a[i] ` `=` `next_missing ` ` ` `count[next_missing] ` `=` `1` ` ` `# Driver Code ` `A ` `=` `[ ` `2` `, ` `2` `, ` `3` `, ` `3` `] ` `n ` `=` `len` `(A) ` `makePermutation(A, n) ` ` ` `for` `i ` `in` `range` `(n): ` ` ` `print` `(A[i], end ` `=` `" "` `) ` ` ` `# This code is contributed by "Sharad_Bhardwaj". ` |

*chevron_right*

*filter_none*

Output:

1 2 4 3

## Recommended Posts:

- Permutation of an array that has smaller values from another array
- Find the number of sub arrays in the permutation of first N natural numbers such that their median is M
- Minimum operations required to change the array such that |arr[i] - M| <= 1
- Minimum number of given operations required to convert a permutation into an identity permutation
- Find the permutation p from the array q such that q[i] = p[i+1] - p[i]
- Change one element in the given array to make it an Arithmetic Progression
- Print all distinct integers that can be formed by K numbers from a given array of N numbers
- Rearrange numbers in an array such that no two adjacent numbers are same
- Minimum number greater than the maximum of array which cannot be formed using the numbers in the array
- GCD of more than two (or array) numbers
- Change K elements so that (a1^2 + a2^2 + …+ aN^2 ) <= (a1 + a2 +…+ aN) becomes true
- Change string to a new character set
- Given an array and three numbers, maximize (x * a[i]) + (y * a[j]) + (z * a[k])
- Average numbers in array
- Sum of all prime numbers in an Array

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.