• + 41 comments

    Simple solution with explanation

    From my HackerRank solutions.

    Our input provides us n values of x and p(x)

    p(x) is a one-to-one function, so it has an inverse. We create the function representing the inverse of p(x), and represent it as an array: int [] p_inverse

    We need to find a y where p(p(y)) = x. This equation can be rewritten as
    y = p_inverse(p_inverse(x)), which is the version of the equation we use to calculate and print y.

    import java.util.Scanner;
    
    public class Solution {
        public static void main(String [] args) {
            /* Create function: p_inverse */
            Scanner scan = new Scanner(System.in);
            int n = scan.nextInt();
            int [] p_inverse = new int[n + 1];
            for (int x = 1; x <= n; x++) {
                int px = scan.nextInt();
                p_inverse[px] = x;
            }
            scan.close();
            
            /* Calculate and print each y */
            for (int x = 1; x <= n; x++) {
                int y = p_inverse[p_inverse[x]];
                System.out.println(y);
            }
        }
    }
    

    Let me know if you have any questions.