Given an array arr[] consisting of integers in the range [1, N], the task is to determine whether the Inverse Permutation of the given array is same as the given array.
An inverse permutation is a permutation obtained by inserting the position of all elements at the position equal to the respective values of the element in the array.
Illustration:
arr[] = {2, 4, 1, 3, 5}
The inverse permutation of the array will be equal to {3, 1, 4, 2, 5}
Examples:
Input: N = 4, arr[] = {1, 4, 3, 2}
Output: Yes
Explanation:
The inverse permutation of the given array is {1, 4, 3, 2} which is same as the given array.
Input: N = 5, arr[] = {2, 3, 4, 5, 1}
Output: No
Explanation:
The inverse permutation of the given array is {5, 1, 2, 3, 4} which is not the same as the given array.
Approach :
Follow the steps below to solve the problem:
- Find the inverse permutation of the given array.
- Check, if the generated array is same as the original array.
- If both are same, then print Yes.Otherwise, print No.
Below is the implementation of the above approach:
C++
// C++ Program to implement // the above approach #include <iostream> using namespace std; // Function to check if the inverse // permutation of the given array is // same as the original array void inverseEqual( int arr[], int n) { // Stores the inverse // permutation int brr[n]; // Generate the inverse permutation for ( int i = 0; i < n; i++) { int present_index = arr[i] - 1; brr[present_index] = i + 1; } // Check if the inverse permutation // is same as the given array for ( int i = 0; i < n; i++) { if (arr[i] != brr[i]) { cout << "No" << endl; return ; } } cout << "Yes" << endl; } // Driver Code int main() { int n = 4; int arr[n] = { 1, 4, 3, 2 }; inverseEqual(arr, n); return 0; } |
Java
// Java program to implement // the above approach import java.util.*; class GFG{ // Function to check if the inverse // permutation of the given array is // same as the original array static void inverseEqual( int arr[], int n) { // Stores the inverse // permutation int [] brr = new int [n]; // Generate the inverse permutation for ( int i = 0 ; i < n; i++) { int present_index = arr[i] - 1 ; brr[present_index] = i + 1 ; } // Check if the inverse permutation // is same as the given array for ( int i = 0 ; i < n; i++) { if (arr[i] != brr[i]) { System.out.println( "No" ); return ; } } System.out.println( "Yes" ); } // Driver code public static void main(String[] args) { int n = 4 ; int [] arr = { 1 , 4 , 3 , 2 }; inverseEqual(arr, n); } } // This code is contributed by offbeat |
Python3
# Python3 program to implement # the above approach # Function to check if the inverse # permutation of the given array is # same as the original array def inverseEqual(arr, n): # Stores the inverse # permutation brr = [ 0 ] * n # Generate the inverse permutation for i in range (n): present_index = arr[i] - 1 brr[present_index] = i + 1 # Check if the inverse permutation # is same as the given array for i in range (n): if arr[i] ! = brr[i]: print ( "NO" ) return print ( "YES" ) # Driver code n = 4 arr = [ 1 , 4 , 3 , 2 ] inverseEqual(arr, n) # This code is contributed by Stuti Pathak |
C#
// C# program to implement // the above approach using System; class GFG{ // Function to check if the inverse // permutation of the given array is // same as the original array static void inverseEqual( int []arr, int n) { // Stores the inverse // permutation int [] brr = new int [n]; // Generate the inverse permutation for ( int i = 0; i < n; i++) { int present_index = arr[i] - 1; brr[present_index] = i + 1; } // Check if the inverse permutation // is same as the given array for ( int i = 0; i < n; i++) { if (arr[i] != brr[i]) { Console.WriteLine( "No" ); return ; } } Console.WriteLine( "Yes" ); } // Driver code public static void Main(String[] args) { int n = 4; int [] arr = { 1, 4, 3, 2 }; inverseEqual(arr, n); } } // This code is contributed by sapnasingh4991 |
Yes
Time Complexity: O(N)
Auxiliary Space: O(N)