Wednesday, January 1, 2025
Google search engine
HomeData Modelling & AIFind the good permutation of first N natural numbers

Find the good permutation of first N natural numbers

Given an integer N, the task is to print a good permutation of first N natural numbers. Let’s denote the ith element of the permutation be pi
A good permutation is a permutation such that for all 1 ? i ? N the following equations hold true, 
 

  • ppi = i
  • pi != i

Basically above expressions mean, no value is equal to its position.
If no such good permutation exists then print -1.
Examples: 
 

Input: N = 1 
Output: -1 
No good permutation exists.
Input: N = 2 
Output: 2 1 
Position of 2 is 1 and position of 1 is 2. 
 

 

Approach: Consider permutation p such that pi = i. Actually, p is a sequence of numbers from 1 to N and ppi = i
Now the only trick is to change the permutation to satisfy the second equation i.e. pi != i. Let’s swap every two consecutive elements. More formally, for each k: 2k ? n let’s swap p2k – 1 and p2k. It’s easy to see that the obtained permutation satisfies both the equations for every n with the only exception: when n is odd, there is no answer and we should print -1.
Below is the implementation of the above approach:
 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the good permutation
// of first N natural numbers
int printPermutation(int n)
{
    // If n is odd
    if (n % 2 != 0)
        cout << -1;
 
    // Otherwise
    else
        for (int i = 1; i <= n / 2; i++)
            cout << 2 * i << " " << 2 * i - 1 << " ";
}
 
// Driver code
int main()
{
    int n = 4;
    printPermutation(n);
 
    return 0;
}


Java




// Java implementation of the approach
 
class GFG
{
 
// Function to print the good permutation
// of first N natural numbers
static int printPermutation(int n)
{
    // If n is odd
    if (n % 2 != 0)
    {
        System.out.println("-1");
    }
 
    // Otherwise
    else
        for (int i = 1; i <= n / 2; i++)
        {
            System.out.print(2 * i + " " + ((2 * i) - 1) + " ");
        }
         
    return n;
     
}
 
// Driver code
public static void main(String []args)
{
    int n = 4;
    printPermutation(n);
}
}
 
// This code contributed by Rajput-Ji


Python3




# Python3 implementation of the approach
 
# Function to print the good permutation
# of first N natural numbers
def printPermutation(n):
     
    # If n is odd
    if (n % 2 != 0):
        print(-1);
 
    # Otherwise
    else:
        for i in range(1, (n // 2) + 1):
            print((2 * i), (2 * i - 1), end = " ");
 
# Driver code
n = 4;
printPermutation(n);
 
# This code is contributed by mits


C#




// C# implementation of the approach
using System;
 
class GFG {
 
// Function to print the good permutation
// of first N natural numbers
static int printPermutation(int n)
{
    // If n is odd
    if (n % 2 != 0)
    {
        Console.WriteLine("-1");
    }
 
    // Otherwise
    else
        for (int i = 1; i <= n / 2; i++)
        {
            Console.WriteLine(2 * i + " " + ((2 * i) - 1) + " ");
        }
         
    return n;
     
}
 
// Driver code
public static void Main(String []args)
{
    int n = 4;
    printPermutation(n);
}
}
 
// This code is contributed by Kirti_Mangal


PHP




<?phP
// PHP implementation of the approach
 
// Function to print the good permutation
// of first N natural numbers
function printPermutation($n)
{
    // If n is odd
    if ($n % 2 != 0)
    {
        echo("-1");
    }
 
    // Otherwise
    else
        for ($i = 1; $i <= $n / 2; $i++)
        {
            echo(2 * $i . " " .
               ((2 * $i) - 1) . " ");
        }
         
    return $n;
}
 
// Driver code
$n = 4;
printPermutation($n);
 
// This code contributed
// by Code_Mech.
?>


Javascript




<script>
 
// Javascript implementation of the approach
 
// Function to print the good permutation
// of first N natural numbers
function printPermutation(n)
{
    // If n is odd
    if (n % 2 != 0)
        document.write(-1);
 
    // Otherwise
    else
        for (let i = 1; i <= Math.floor(n / 2); i++)
            document.write((2 * i) + " " + ((2 * i) - 1) + " ");
}
 
// Driver code
    let n = 4;
    printPermutation(n);
     
//This code is contributed by Manoj
</script>


Output: 

2 1 4 3

 

Time Complexity: O(n)

Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Dominic Rubhabha-Wardslaus
Dominic Rubhabha-Wardslaushttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Recent Comments