Related Articles
Check if the given array is same as its inverse permutation
• Difficulty Level : Expert
• Last Updated : 25 Mar, 2021

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.

Method 1 :

In this method, we will generate the inverse permutation of the array, then check if it is same as the original array.

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 ``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`
Output
`Yes`

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

Method 2 :

In this method, we take element one by one and check for elements if at (arr[i] -1) index i+1 is present or not . If not then the inverse permuation of the given array is not same as the array.

Below is the implementation of the above approach:

## C++

 `// C++ Program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to check if the inverse``// permutation of the given array is``// same as the original array``bool` `inverseEqual(``int` `arr[], ``int` `n)``{` `    ``// Check the if inverse permutation is not same``    ``for` `(``int` `i = 0; i < n; i++)``        ``if` `(arr[arr[i] - 1] != i + 1)``            ``return` `false``;` `    ``return` `true``;``}` `// Driver Code``int` `main()``{``    ``int` `n = 4;``    ``int` `arr[n] = { 1, 4, 3, 2 };` `    ``// Function Call``    ``cout << (inverseEqual(arr, n) ? ``"Yes"` `: ``"No"``);` `    ``return` `0;``}`
Output
`Yes`

Time Complexity: O(N)

Auxiliary Space: O(1) My Personal Notes arrow_drop_up