Check if an Array is a permutation of numbers from 1 to N : Set 2

• Last Updated : 21 May, 2021

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 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:
The given array contains all integers from 1 to 5 exactly once. Hence, it represents a permutation of length 5.

Naive Approach: in O(N2) Time
This approach is mentioned here
Another Approach: in O(N) Time and O(N) Space
This approach is mentioned here.
Efficient Approach: Using HashTable

1. Create a HashTable of N size to store the frequency count of each number from 1 to N
2. Traverse through the given array and store the frequency of each number in the HashTable.
3. Then traverse the HashTable and check if all the numbers from 1 to N have a frequency of 1 or not.
4. Print “Yes” if the above condition is True, Else “No”.

Below is the implementation of the above approach:

CPP

 // C++ program to decide if an array// represents a permutation or not#include using namespace std; // Function to check if an// array represents a permutation or notstring permutation(int arr[], int N){     int hash[N + 1] = { 0 };     // Counting the frequency    for (int i = 0; i < N; i++) {        hash[arr[i]]++;    }     // Check if each frequency is 1 only    for (int i = 1; i <= N; i++) {        if (hash[i] != 1)            return "No";    }     return "Yes";} // Driver codeint main(){    int arr[] = { 1, 1, 5, 5, 3 };    int n = sizeof(arr) / sizeof(int);    cout << permutation(arr, n) << endl;     return 0;}

Java

 // Java program to decide if an array// represents a permutation or notclass GFG{  // Function to check if an// array represents a permutation or notstatic String permutation(int arr[], int N){      int []hash = new int[N + 1];      // Counting the frequency    for (int i = 0; i < N; i++) {        hash[arr[i]]++;    }      // Check if each frequency is 1 only    for (int i = 1; i <= N; i++) {        if (hash[i] != 1)            return "No";    }      return "Yes";}  // Driver codepublic static void main(String[] args){    int arr[] = { 1, 1, 5, 5, 3 };    int n = arr.length;    System.out.print(permutation(arr, n) +"\n");}} // This code is contributed by Princi Singh

Python3

 # Python3 program to decide if an array# represents a permutation or not # Function to check if an# array represents a permutation or notdef permutation(arr,  N) :     hash = *(N + 1);     # Counting the frequency    for i in range(N) :        hash[arr[i]] += 1;     # Check if each frequency is 1 only    for i in range(1, N + 1) :        if (hash[i] != 1) :            return "No";     return "Yes"; # Driver codeif __name__ == "__main__" :     arr = [ 1, 1, 5, 5, 3 ];    n = len(arr);    print(permutation(arr, n));     # This code is contributed by Yash_R

C#

 // C# program to decide if an array// represents a permutation or notusing System; class GFG{      // Function to check if an    // array represents a permutation or not    static string permutation(int []arr, int N)    {              int []hash = new int[N + 1];              // Counting the frequency        for (int i = 0; i < N; i++) {            hash[arr[i]]++;        }              // Check if each frequency is 1 only        for (int i = 1; i <= N; i++) {            if (hash[i] != 1)                return "No";        }              return "Yes";    }          // Driver code    public static void Main(string[] args)    {        int []arr = { 1, 1, 5, 5, 3 };        int n = arr.Length;        Console.Write(permutation(arr, n) +"\n");    }} // This code is contributed by Yash_R

Javascript


Output:
No

Time Complexity: O(N)
Auxiliary Space Complexity: O(N)

My Personal Notes arrow_drop_up