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 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
- Create a HashTable of N size to store the frequency count of each number from 1 to N
- Traverse through the given array and store the frequency of each number in the HashTable.
- Then traverse the HashTable and check if all the numbers from 1 to N have a frequency of 1 or not.
- Print “Yes” if the above condition is True, Else “No”.
Below is the implementation of the above approach:
CPP
#include <bits/stdc++.h>
using namespace std;
string permutation( int arr[], int N)
{
int hash[N + 1] = { 0 };
for ( int i = 0; i < N; i++) {
hash[arr[i]]++;
}
for ( int i = 1; i <= N; i++) {
if (hash[i] != 1)
return "No" ;
}
return "Yes" ;
}
int main()
{
int arr[] = { 1, 1, 5, 5, 3 };
int n = sizeof (arr) / sizeof ( int );
cout << permutation(arr, n) << endl;
return 0;
}
|
Java
class GFG{
static String permutation( int arr[], int N)
{
int []hash = new int [N + 1 ];
for ( int i = 0 ; i < N; i++) {
hash[arr[i]]++;
}
for ( int i = 1 ; i <= N; i++) {
if (hash[i] != 1 )
return "No" ;
}
return "Yes" ;
}
public static void main(String[] args)
{
int arr[] = { 1 , 1 , 5 , 5 , 3 };
int n = arr.length;
System.out.print(permutation(arr, n) + "\n" );
}
}
|
Python3
def permutation(arr, N) :
hash = [ 0 ] * (N + 1 );
for i in range (N) :
hash [arr[i]] + = 1 ;
for i in range ( 1 , N + 1 ) :
if ( hash [i] ! = 1 ) :
return "No" ;
return "Yes" ;
if __name__ = = "__main__" :
arr = [ 1 , 1 , 5 , 5 , 3 ];
n = len (arr);
print (permutation(arr, n));
|
C#
using System;
class GFG{
static string permutation( int []arr, int N)
{
int []hash = new int [N + 1];
for ( int i = 0; i < N; i++) {
hash[arr[i]]++;
}
for ( int i = 1; i <= N; i++) {
if (hash[i] != 1)
return "No" ;
}
return "Yes" ;
}
public static void Main( string [] args)
{
int []arr = { 1, 1, 5, 5, 3 };
int n = arr.Length;
Console.Write(permutation(arr, n) + "\n" );
}
}
|
Javascript
<script>
function permutation(arr, N)
{
var hash = Array(N+1).fill(0);
for ( var i = 0; i < N; i++) {
hash[arr[i]]++;
}
for ( var i = 1; i <= N; i++) {
if (hash[i] != 1)
return "No" ;
}
return "Yes" ;
}
var arr = [1, 1, 5, 5, 3];
var n = arr.length;
document.write( permutation(arr, n));
</script>
|
Time Complexity: O(N)
Auxiliary Space Complexity: O(N)
Last Updated :
21 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...