给定数组arr []由[1,N]范围内的整数组成,任务是确定给定数组的逆排列是否与给定数组相同。
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}
例子:
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.
方法1:
在这种方法中,我们将生成数组的逆排列,然后检查它是否与原始数组相同。
请按照以下步骤解决问题:
- 查找给定数组的逆排列。
- 检查生成的数组是否与原始数组相同。
- 如果两者相同,则打印“是”,否则,打印“否” 。
下面是上述方法的实现:
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
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;
}
Yes
时间复杂度: O(N)
辅助空间: O(N)
方法2:
在此方法中,我们一个接一个地处理元素,并检查是否存在(arr [i] -1)索引i + 1的元素。如果不是,则给定数组的反渗透与数组不同。
下面是上述方法的实现:
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;
}
Yes
时间复杂度: O(N)
辅助空间: O(1)