Check if an Array is a permutation of numbers from 1 to N
Last Updated : 05 Oct, 2023
Given an array arr containing N positive integers, the task is to check if the given array arr represents a permutation or not.
A sequence of N integers is called a permutation if it contains all integers from 1 to N exactly once.
Examples:
Input: arr[] = {1, 2, 5, 3, 2}
Output: No
Explanation: The given array is not a permutation of numbers from 1 to N, because it contains 2 twice, and 4 is missing for the array to represent a permutation of length 5.
Input: arr[] = {1, 2, 5, 3, 4}
Output: Yes
Explanation:
Given array contains all integers from 1 to 5 exactly once. Hence, it represents a permutation of length 5.
Naive Approach: Clearly, the given array will represent a permutation of length N only, where N is the length of the array. So we have to search for each element from 1 to N in the given array. If all the elements are found then the array represents a permutation else it does not.
Algorithm:
- Initialize a flag variable "isPermutation" to true.
- Initialize a variable "N" to the length of the array.
- Loop through integers from 1 to N:
- Initialize a flag variable "found" to false.
- Loop through the array elements and If the integer "i" is found in the array, set "found" to true and break the loop.
- If "found" is false, set "isPermutation" to false and break the loop.
- If "isPermutation" is true, print "Array represents a permutation".
- Else, print "Array does not represent a permutation".
Below is the implementation of the approach:
C++ // C++ code for the approach #include <bits/stdc++.h> using namespace std; // Function to check if an Array is a // permutation of numbers from 1 to N bool isPermutation(int arr[], int n) { // Check for each element from 1 to N in the array for(int i=1; i<=n; i++) { bool found = false; for(int j=0; j<n; j++) { if(arr[j] == i) { found = true; break; } } // If any element is not found, array is not a permutation if(!found) { return false; } } // All elements found, array is a permutation return true; } // Driver's code int main() { // Input int arr[] = { 1, 2, 5, 3, 2 }; int n = sizeof(arr)/sizeof(arr[0]); // Function Call if(isPermutation(arr, n)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }
Java // Java code for the approach import java.util.*; public class GFG { // Function to check if an Array is a // permutation of numbers from 1 to N public static boolean isPermutation(int[] arr, int n) { // Check for each element from // 1 to N in the array for (int i = 1; i <= n; i++) { boolean found = false; for (int j = 0; j < n; j++) { if (arr[j] == i) { found = true; break; } } // If any element is not found, // array is not a permutation if (!found) { return false; } } // All elements found, array // is a permutation return true; } // Driver's code public static void main(String[] args) { int[] arr = { 1, 2, 5, 3, 2 }; int n = arr.length; if (isPermutation(arr, n)) { System.out.println("Yes"); } else { System.out.println("No"); } } }
Python3 # Function to check if a list is a permutation of numbers from 1 to N def is_permutation(arr): n = len(arr) # Check for each element from 1 to N in the list for i in range(1, n + 1): found = False for j in range(n): if arr[j] == i: found = True break # If any element is not found, the list is not a permutation if not found: return False # All elements found, the list is a permutation return True # Driver's code arr = [1, 2, 5, 3, 2] # Function Call if is_permutation(arr): print("Yes") else: print("No")
C# using System; public class GFG { // Function to check if an Array is a // permutation of numbers from 1 to N public static bool IsPermutation(int[] arr, int n) { // Check for each element from // 1 to N in the array for (int i = 1; i <= n; i++) { bool found = false; for (int j = 0; j < n; j++) { if (arr[j] == i) { found = true; break; } } // If any element is not found, // array is not a permutation if (!found) { return false; } } // All elements found, array // is a permutation return true; } // Driver's code public static void Main(string[] args) { int[] arr = { 1, 2, 5, 3, 2 }; int n = arr.Length; if (IsPermutation(arr, n)) { Console.WriteLine("Yes"); } else { Console.WriteLine("No"); } } } // This code is contributed by Samim Hossain Mondal.
JavaScript // Function to check if an Array is a permutation of numbers from 1 to N function isPermutation(arr, n) { // Check for each element from 1 to N in the array for (let i = 1; i <= n; i++) { let found = false; for (let j = 0; j < n; j++) { if (arr[j] === i) { found = true; break; } } // If any element is not found, array is not a permutation if (!found) { return false; } } // All elements found, array is a permutation return true; } // Driver's code const arr = [1, 2, 5, 3, 2]; const n = arr.length; if (isPermutation(arr, n)) { console.log("Yes"); } else { console.log("No"); }
Time Complexity: O(N2)
Efficient Approach:
The above method can be optimized using a set data structure.
- Traverse the given array and insert every element in the set data structure.
- Also, find the maximum element in the array. This maximum element will be value N which will represent the size of the set.
- After traversal of the array, check if the size of the set is equal to N.
- If the size of the set is equal to N then the array represents a permutation else it doesn’t.
Below is the implementation of the above approach:
C++ // C++ Program to decide if an // array represents a permutation or not #include <bits/stdc++.h> using namespace std; // Function to check if an // array represents a permutation or not bool permutation(int arr[], int n) { // Set to check the count // of non-repeating elements set<int> hash; int maxEle = 0; for (int i = 0; i < n; i++) { // Insert all elements in the set hash.insert(arr[i]); // Calculating the max element maxEle = max(maxEle, arr[i]); } if (maxEle != n) return false; // Check if set size is equal to n if (hash.size() == n) return true; return false; } // Driver code int main() { int arr[] = { 1, 2, 5, 3, 2 }; int n = sizeof(arr) / sizeof(int); if (permutation(arr, n)) cout << "Yes" << endl; else cout << "No" << endl; return 0; }
Java // Java Program to decide if an // array represents a permutation or not import java.util.*; class GFG{ // Function to check if an // array represents a permutation or not static boolean permutation(int []arr, int n) { // Set to check the count // of non-repeating elements Set<Integer> hash = new HashSet<Integer>(); int maxEle = 0; for (int i = 0; i < n; i++) { // Insert all elements in the set hash.add(arr[i]); // Calculating the max element maxEle = Math.max(maxEle, arr[i]); } if (maxEle != n) return false; // Check if set size is equal to n if (hash.size() == n) return true; return false; } // Driver code public static void main(String args[]) { int arr[] = { 1, 2, 5, 3, 2 }; int n = arr.length; if (permutation(arr, n)) System.out.println("Yes"); else System.out.println("No"); } } // This code is contributed by Surendra_Gangwar
Python3 # Python3 Program to decide if an # array represents a permutation or not # Function to check if an # array represents a permutation or not def permutation(arr, n): # Set to check the count # of non-repeating elements s = set() maxEle = 0; for i in range(n): # Insert all elements in the set s.add(arr[i]); # Calculating the max element maxEle = max(maxEle, arr[i]); if (maxEle != n): return False # Check if set size is equal to n if (len(s) == n): return True; return False; # Driver code if __name__=='__main__': arr = [ 1, 2, 5, 3, 2 ] n = len(arr) if (permutation(arr, n)): print("Yes") else: print("No") # This code is contributed by Princi Singh
C# // C# Program to decide if an // array represents a permutation or not using System; using System.Collections.Generic; class GFG{ // Function to check if an // array represents a permutation or not static bool permutation(int []arr, int n) { // Set to check the count // of non-repeating elements HashSet<int> hash = new HashSet<int>(); int maxEle = 0; for (int i = 0; i < n; i++) { // Insert all elements in the set hash.Add(arr[i]); // Calculating the max element maxEle = Math.Max(maxEle, arr[i]); } if (maxEle != n) return false; // Check if set size is equal to n if (hash.Count == n) return true; return false; } // Driver code public static void Main(String []args) { int []arr = { 1, 2, 5, 3, 2 }; int n = arr.Length; if (permutation(arr, n)) Console.WriteLine("Yes"); else Console.WriteLine("No"); } } // This code is contributed by Princi Singh
JavaScript <script> // JavaScript Program to decide if an // array represents a permutation or not // Function to check if an // array represents a permutation or not function permutation(arr, n) { // Set to check the count // of non-repeating elements let hash = new Set(); let maxEle = 0; for (let i = 0; i < n; i++) { // Insert all elements in the set hash.add(arr[i]); // Calculating the max element maxEle = Math.max(maxEle, arr[i]); } if (maxEle != n) return false; // Check if set size is equal to n if (hash.length == n) return true; return false; } // Driver Code let arr = [ 1, 2, 5, 3, 2 ]; let n = arr.length; if (permutation(arr, n)) document.write("Yes"); else document.write("No"); </script>
Time Complexity: O(N log N), Since every insert operation in the set is an O(log N) operation. There will be N such operations hence O(N log N).
Auxiliary Space: O(N)
Efficient Approach:-
- As we have to check all elements from 1 to N in the array
- So think that if we just sort the array then if the array element will be from 1 to N then the sequence will be like 1,2,3_____,N.
- So we can just sort the array and can check is all the elements are like 1,2,3,____,N or not.
Implementation:-
C++ // C++ Program to decide if an // array represents a permutation or not #include <bits/stdc++.h> using namespace std; // Function to check if an // array represents a permutation or not bool permutation(int arr[], int n) { //sorting the array sort(arr,arr+n); //traversing the array to find if it is a valid permutation ot not for(int i=0;i<n;i++) { //if i+1 element not present //or dublicacy is present if(arr[i]!=i+1)return false; } return true; } // Driver code int main() { int arr[] = { 1, 2, 5, 3, 2 }; int n = sizeof(arr) / sizeof(int); if (permutation(arr, n)) cout << "Yes" << endl; else cout << "No" << endl; return 0; } //This code is contributed by shubhamrajput6156
Java // Java Program to decide if an // array represents a permutation or not import java.util.*; class GFG { // Function to check if an // array represents a permutation or not static boolean permutation(int arr[], int n) { // sorting the array Arrays.sort(arr); // traversing the array to find if it is a valid permutation ot not for(int i = 0; i < n; i++) { //if i+1 element not present //or dublicacy is present if(arr[i]!=i+1)return false; } return true; } // Driver Code public static void main(String[] args) { int arr[] = { 1, 2, 5, 3, 2 }; int n = arr.length; if (permutation(arr, n)) System.out.println("Yes"); else System.out.println("No"); return ; } } // this code is contributed by bhardwajji
Python3 # Python3 Program to decide if an # array represents a permutation or not # Function to check if an # array represents a permutation or not def permutation(arr, n): # sorting the array arr.sort() # traversing the array to find if it is a valid permutation or not for i in range(n): # if i+1 element not present # or dublicacy is present if arr[i] != i + 1: return False return True # Driver code if __name__ == '__main__': arr = [1, 2, 5, 3, 2] n = len(arr) if permutation(arr, n): print("Yes") else: print("No")
C# // C# Program to decide if an // array represents a permutation or not using System; public class GFG { // Function to check if an // array represents a permutation or not public static bool permutation(int[] arr, int n) { //sorting the array Array.Sort(arr); //traversing the array to find if it is a valid permutation ot not for (int i = 0;i < n;i++) { //if i+1 element not present //or dublicacy is present if (arr[i] != i + 1) { return false; } } return true; } internal static void Main() { int[] arr = {1, 2, 5, 3, 2}; int n = arr.Length; if (permutation(arr, n)) { Console.Write("Yes"); Console.Write("\n"); } else { Console.Write("No"); Console.Write("\n"); } } } //This code is contributed by bhardwajji
JavaScript // Function to check if an // array represents a permutation or not function permutation(arr, n) { // sorting the array arr.sort(); // traversing the array to find if it is a valid permutation or not for (let i = 0; i < n; i++) { // if i+1 element not present // or dublicacy is present if (arr[i] !== i + 1) { return false; } } return true; } // Driver code const arr = [1, 2, 5, 3, 2]; const n = arr.length; if (permutation(arr, n)) { console.log("Yes"); } else { console.log("No"); } // This code is Contributed by Shushant Kumar
Time Complexity:- O(NLogN)
Space Complexity:- O(1)
Another Efficient Approach: create a boolean array that help in if we already visited that element return False
else Traverse the Whole array
Below is the implementation of above approach
C++ #include <cstring> #include <iostream> using namespace std; bool permutation(int arr[], int n) { // create a boolean array to keep track of which numbers // have been seen before bool x[n]; // initialize the boolean array with false values memset(x, false, sizeof(x)); // check each number in the array for (int i = 0; i < n; i++) { // if the number has not been seen before, mark it // as seen if (x[arr[i] - 1] == false) { x[arr[i] - 1] = true; } // if the number has been seen before, the array // does not represent a permutation else { return false; } } // check if all numbers from 1 to n have been seen in // the array for (int i = 0; i < n; i++) { // if a number has not been seen in the array, the // array does not represent a permutation if (x[i] == false) { return false; } } // if the array has passed all checks, it represents a // permutation return true; } int main() { // initialize the array to be checked int arr[] = { 1, 2, 3, 4, 5 }; int n = sizeof(arr) / sizeof(arr[0]); // check if the array represents a permutation if (permutation(arr, n)) { cout << "YES" << endl; } else { cout << "NO" << endl; } return 0; }
Java import java.util.Arrays; public class Main { public static boolean permutation(int[] arr, int n) { // create a boolean array to keep track of which numbers // have been seen before boolean[] x = new boolean[n]; // initialize the boolean array with false values Arrays.fill(x, false); // check each number in the array for (int i = 0; i < n; i++) { // if the number has not been seen before, mark it // as seen if (x[arr[i] - 1] == false) { x[arr[i] - 1] = true; } // if the number has been seen before, the array // does not represent a permutation else { return false; } } // check if all numbers from 1 to n have been seen in // the array for (int i = 0; i < n; i++) { // if a number has not been seen in the array, the // array does not represent a permutation if (x[i] == false) { return false; } } // if the array has passed all checks, it represents a // permutation return true; } public static void main(String[] args) { // initialize the array to be checked int[] arr = { 1, 2, 3, 4, 5 }; int n = arr.length; // check if the array represents a permutation if (permutation(arr, n)) { System.out.println("YES"); } else { System.out.println("NO"); } } } // This code is contributed by shiv1043g
Python3 # Python code for the above approach # Function to check if an # array represents a permutation or not # time complexity O(N) # space O(N) def permutation(arr, n): # crete a bool array that check if the element # we traversing are already exist in array or not x = [0] * n # checking for every element in array for i in range(n): if x[arr[i] - 1] == 0: x[arr[i] - 1] = 1 else: return False # for corner cases for i in range(n): if x[i] == 0: return False return True # Drive code if __name__ == "__main__": arr = [1, 2, 3, 4, 5] n = len(arr) if (permutation(arr, n)): print("YES") else: print("NO") # This code is contributed by Shushant Kumar
C# using System; public class Gfg { public static bool permutation(int[] arr, int n) { // create a boolean array to keep track of which numbers // have been seen before bool[] x = new bool[n]; // initialize the boolean array with false values for (int i = 0; i < n; i++) { x[i] = false; } // check each number in the array for (int i = 0; i < n; i++) { // if the number has not been seen before, mark it // as seen if (x[arr[i] - 1] == false) { x[arr[i] - 1] = true; } // if the number has been seen before, the array // does not represent a permutation else { return false; } } // check if all numbers from 1 to n have been seen in // the array for (int i = 0; i < n; i++) { // if a number has not been seen in the array, the // array does not represent a permutation if (x[i] == false) { return false; } } // if the array has passed all checks, it represents a // permutation return true; } public static void Main() { // initialize the array to be checked int[] arr = { 1, 2, 3, 4, 5 }; int n = arr.Length; // check if the array represents a permutation if (permutation(arr, n)) { Console.WriteLine("YES"); } else { Console.WriteLine("NO"); } } }
JavaScript // Function to check if an array represents a permutation or not // time complexity O(N) // space O(N) function permutation(arr, n) { // create a boolean array to check if the element we're // traversing already exists in the array or not let x = new Array(n).fill(false); // check for every element in array for (let i = 0; i < n; i++) { if (x[arr[i] - 1] == false) { x[arr[i] - 1] = true; } else { return false; } } // for corner cases for (let i = 0; i < n; i++) { if (x[i] == false) { return false; } } return true; } // Drive code let arr = [1, 2, 3, 4, 5]; let n = arr.length; if (permutation(arr, n)) { console.log("YES"); } else { console.log("NO"); } // This code is contributed by shushant kumar
Time Complexity: O(N)
Auxiliary Space: O(N)
Similar Reads
Check if an Array is a permutation of numbers from 1 to N : Set 2
Given an array arr containing N positive integers, the task is to check if the given array arr represents a permutation or not. A sequence of N integers is called a permutation if it contains all integers from 1 to N exactly once. Examples: Input: arr[] = {1, 2, 5, 3, 2} Output: No Explanation: The
4 min read
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 4 Explanation: To make it a permutation of 1 to 4, 1 and 4 are missing from the array. So replace 2, 3 wi
5 min read
Minimum steps to convert an Array into permutation of numbers from 1 to N
Given an array arr of length N, the task is to count the minimum number of operations to convert given sequence into a permutation of first N natural numbers (1, 2, ...., N). In each operation, increment or decrement an element by one.Examples: Input: arr[] = {4, 1, 3, 6, 5} Output: 4 Apply decremen
4 min read
Find all duplicate and missing numbers in given permutation array of 1 to N
Given an array arr[] of size N consisting of the first N natural numbers, the task is to find all the repeating and missing numbers over the range [1, N] in the given array. Examples: Input: arr[] = {1, 1, 2, 3, 3, 5}Output: Missing Numbers: [4, 6]Duplicate Numbers: [1, 3]Explanation:As 4 and 6 are
8 min read
Minimum cost to make an Array a permutation of first N natural numbers
Given an array arr of positive integers of size N, the task is to find the minimum cost to make this array a permutation of first N natural numbers, where the cost of incrementing or decrementing an element by 1 is 1.Examples: Input: arr[] = {1, 1, 7, 4} Output: 5 Explanation: Perform increment oper
4 min read
Check if two arrays are permutations of each other
Given two unsorted arrays of the same size, write a function that returns true if two arrays are permutations of each other, otherwise false. Examples: Input: arr1[] = {2, 1, 3, 5, 4, 3, 2} arr2[] = {3, 2, 2, 4, 5, 3, 1}Output: YesInput: arr1[] = {2, 1, 3, 5,} arr2[] = {3, 2, 2, 4}Output: NoWe stron
15+ min read
Check if any permutation of N equals any power of K
Given a positive integer N and K where [Tex]2 \leq N \leq 10^{18} [/Tex] and [Tex]2 \leq K \leq N [/Tex] . The task is to check whether any permutation of digits of N equals any power of K. If possible return "True" otherwise return "False".Examples: Input: N = 96889010407, K = 7 Output: True Explan
6 min read
Count all the permutation of an array
Given an array of integer A[] with no duplicate elements, write a function that returns the count of all the permutations of an array having no subarray of [i, i+1] for every i in A[]. Examples: Input: 1 3 9 Output: 3Explanation: All the permutations of 1 3 9 are : [1, 3, 9], [1, 9, 3], [3, 9, 1], [
10 min read
Check if any permutation of a number without any leading zeros is a power of 2 or not
Given an integer N, the task is to check if any permutation of N without any leading zeros is a power of 2. If any such permutation of the given number exists, then print that permutation. Otherwise, print No. Examples: Input: N = 46Output: 64Explanation:The permutation of 46 which is perfect power
9 min read
Check if Array elements of given range form a permutation
Given an array arr[] consisting of N distinct integers and an array Q[][2] consisting of M queries of the form [L, R], the task for each query is to check if array elements over the range [L, R] forms a permutation or not. Note: A permutation is a sequence of length N containing each number from 1 t
13 min read