给定一个从1到n的整数大小为n的数组,我们需要找到该数组的逆置换。 逆置换 是一种排列,通过在数组中元素值指定的位置插入元素的位置,可以得到这种排列。为了更好地理解,请考虑下面的例子: 假设我们在数组中的位置3处发现了元素4,然后在反向排列中,我们在位置4(元素值)处插入3(元素4在数组中的位置)。 基本上,逆置换是一种置换,其中每个数及其所占位置的数都是交换的。 数组应包含从1到数组大小的元素。 例1:
null
Input = {1, 4, 3, 2}Output = {1, 4, 3, 2}
在这里,对于元素1,我们从arr1插入1的位置,即在arr2的位置1插入1。对于arr1中的元素4,我们在arr2中的位置4处从arr1插入2。同样,对于arr1中的元素2,我们在arr2中插入2的位置,即4。
Example 2 :Input = {2, 3, 4, 5, 1}Output = {5, 1, 2, 3, 4}
在本例中,对于元素2,我们在位置2处插入arr1中arr2的位置2。类似地,我们发现了其他元素的逆排列。 考虑具有元素1至n的阵列ARR。 方法1: 在这种方法中,我们一个接一个地获取元素,并按递增顺序检查元素,然后打印元素的位置。
C++
// Naive CPP Program to find inverse permutation. #include <bits/stdc++.h> using namespace std; // C++ function to find inverse permutations void inversePermutation( int arr[], int size) { // Loop to select Elements one by one for ( int i = 0; i < size; i++) { // Loop to print position of element // where we find an element for ( int j = 0; j < size; j++) { // checking the element in increasing order if (arr[j] == i + 1) { // print position of element where // element is in inverse permutation cout << j + 1 << " " ; break ; } } } } // Driver program to test above function int main() { int arr[] = {2, 3, 4, 5, 1}; int size = sizeof (arr) / sizeof (arr[0]); inversePermutation(arr, size); return 0; } |
JAVA
// Naive java Program to find inverse permutation. import java.io.*; class GFG { // java function to find inverse permutations static void inversePermutation( int arr[], int size) { int i ,j; // Loop to select Elements one by one for ( i = 0 ; i < size; i++) { // Loop to print position of element // where we find an element for ( j = 0 ; j < size; j++) { // checking the element in // increasing order if (arr[j] == i + 1 ) { // print position of element // where element is in inverse // permutation System.out.print( j + 1 + " " ); break ; } } } } // Driver program to test above function public static void main (String[] args) { int arr[] = { 2 , 3 , 4 , 5 , 1 }; int size = arr.length; inversePermutation(arr, size); } } // This code is contributed by vt_m |
Python3
# Naive Python3 Program to # find inverse permutation. # Function to find inverse permutations def inversePermutation(arr, size): # Loop to select Elements one by one for i in range ( 0 , size): # Loop to print position of element # where we find an element for j in range ( 0 , size): # checking the element in increasing order if (arr[j] = = i + 1 ): # print position of element where # element is in inverse permutation print (j + 1 , end = " " ) break # Driver Code arr = [ 2 , 3 , 4 , 5 , 1 ] size = len (arr) inversePermutation(arr, size) #This code is contributed by Smitha Dinesh Semwal |
C#
// Naive C# Program to find inverse permutation. using System; class GFG { // java function to find inverse permutations static void inversePermutation( int []arr, int size) { int i ,j; // Loop to select Elements one by one for ( i = 0; i < size; i++) { // Loop to print position of element // where we find an element for ( j = 0; j < size; j++) { // checking the element in // increasing order if (arr[j] == i + 1) { // print position of element // where element is in inverse // permutation Console.Write( j + 1 + " " ); break ; } } } } // Driver program to test above function public static void Main () { int []arr = {2, 3, 4, 5, 1}; int size = arr.Length; inversePermutation(arr, size); } } // This code is contributed by vt_m |
PHP
<?php // Naive PHP Program to // find inverse permutation. // Function to find // inverse permutations function inversePermutation( $arr , $size ) { for ( $i = 0; $i < $size ; $i ++) { // Loop to print position of element // where we find an element for ( $j = 0; $j < $size ; $j ++) { // checking the element // in increasing order if ( $arr [ $j ] == $i + 1) { // print position of element // where element is in // inverse permutation echo $j + 1 , " " ; break ; } } } } // Driver Code $arr = array (2, 3, 4, 5, 1); $size = sizeof( $arr ); inversePermutation( $arr , $size ); // This code is contributed by aj_36 ?> |
Javascript
<script> // Naive JavaScript program to find inverse permutation. // JavaScript function to find inverse permutations function inversePermutation(arr, size) { let i ,j; // Loop to select Elements one by one for ( i = 0; i < size; i++) { // Loop to print position of element // where we find an element for ( j = 0; j < size; j++) { // checking the element in // increasing order if (arr[j] == i + 1) { // print position of element // where element is in inverse // permutation document.write( j + 1 + " " ); break ; } } } } // Driver code let arr = [2, 3, 4, 5, 1]; let size = arr.length; inversePermutation(arr, size); </script> |
输出:
5 1 2 3 4
方法2: 其想法是使用另一个数组来存储索引和元素映射
C++
// Efficient CPP Program to find inverse permutation. #include <bits/stdc++.h> using namespace std; // C++ function to find inverse permutations void inversePermutation( int arr[], int size) { // to store element to index mappings int arr2[size]; // Inserting position at their // respective element in second array for ( int i = 0; i < size; i++) arr2[arr[i] - 1] = i + 1; for ( int i = 0; i < size; i++) cout << arr2[i] << " " ; } // Driver program to test above function int main() { int arr[] = {2, 3, 4, 5, 1}; int size = sizeof (arr) / sizeof (arr[0]); inversePermutation(arr, size); return 0; } |
JAVA
// Efficient Java Program to find // inverse permutation. import java.io.*; class GFG { // function to find inverse permutations static void inversePermutation( int arr[], int size) { // to store element to index mappings int arr2[] = new int [size]; // Inserting position at their // respective element in second array for ( int i = 0 ; i < size; i++) arr2[arr[i] - 1 ] = i + 1 ; for ( int i = 0 ; i < size; i++) System.out.print(arr2[i] + " " ); } // Driver program to test above function public static void main(String args[]) { int arr[] = { 2 , 3 , 4 , 5 , 1 }; int size = arr.length; inversePermutation(arr, size); } } // This code is contributed by Nikita Tiwari. |
Python3
# Efficient Python 3 Program to find # inverse permutation. # function to find inverse permutations def inversePermutation(arr, size) : # To store element to index mappings arr2 = [ 0 ] * (size) # Inserting position at their # respective element in second array for i in range ( 0 , size) : arr2[arr[i] - 1 ] = i + 1 for i in range ( 0 , size) : print ( arr2[i], end = " " ) # Driver program arr = [ 2 , 3 , 4 , 5 , 1 ] size = len (arr) inversePermutation(arr, size) # This code is contributed by Nikita Tiwari. |
C#
// Efficient C# Program to find // inverse permutation. using System; class GFG { // function to find inverse permutations static void inversePermutation( int []arr, int size) { // to store element to index mappings int []arr2 = new int [size]; // Inserting position at their // respective element in second array for ( int i = 0; i < size; i++) arr2[arr[i] - 1] = i + 1; for ( int i = 0; i < size; i++) Console.Write(arr2[i] + " " ); } // Driver program to test above function public static void Main() { int []arr = {2, 3, 4, 5, 1}; int size = arr.Length; inversePermutation(arr, size); } } // This code is contributed by vt_m. |
Output : 5 1 2 3 4
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END