Inverse List

There are many ways to order a list of integers from 1 to n. For example, if n=3, the list could be : [312].

But there is a special way to create another list from the given list of integers. In this list, the position of the integer i is the ith number in the given list. So following this rule, the given list will be written as: [231]. This list is called the inverse list. Now there exists some list whose inverse list is identical. For example, inverse list of [123] is the same as the given list. Given a list of integers you have to determine whether the list is inverse or not.

Example:

Input:  n = 3, arr[] = {1, 2, 3}
Output: inverse

Approach

Java

public class InverseList {
    public static void main(String[] args) {

        int n = 3;
        int arr[] = { 123 };
        int A[] = new int[n + 1];
        for (int i = 1; i < n + 1; i++) {
            A[i] = arr[i - 1];
        }
        System.out.println(inverseList(n, A));

    }

    static String inverseList(int nint A[]) {
        int cnt = 0;
        int B[] = new int[n + 1];
        for (int i = 1; i < n + 1; i++) {

            B[A[i]] = i;
        }

        for (int i = 1; i < n + 1; i++) {
            if (A[i] != B[i]) {
                cnt++;
            }
        }
        if (cnt != 0)
            return "not inverse";

        else
            return "inverse";
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

string inverseList(int nint A[])
{
    int cnt = 0;
    int B[n + 1] = {0};
    for (int i = 1i < n + 1i++)
    {

        B[A[i]] = i;
    }

    for (int i = 1i < n + 1i++)
    {
        if (A[i] != B[i])
        {
            cnt++;
        }
    }
    if (cnt != 0)
        return "not inverse";

    else
        return "inverse";
}
int main()
{

    int n = 3;
    int arr[] = {123};
    int A[n + 1];
    for (int i = 1i < n + 1i++)
    {
        A[i] = arr[i - 1];
    }
    cout << inverseList(n, A) << "\n";

    return 0;
}


No comments:

Post a Comment