Moonfrog Labs Interview Experience | Set 3 (original) (raw)

Last Updated : 15 Nov, 2015

Q1. Given a sequence of integers, find the longest increasing subsequence. Example: arr = [1, 2, 5, 3, 7] ans : [1, 2, 5, 7] or [1, 2, 3, 7] arr = [4, 3, 1, 2] ans: [1, 2]. Solution:

Java `

import java.util.Arrays;

/** @author hiccup */ class LIS { static int[] maxLIS; static int[] result;

public static void getLCS(int[] arr)
{
    if (null == arr || 0 == arr.length)
        return;

    maxLIS = new int[arr.length];
    /* At least LCS is 1 i.e. element is the
               only one in given sequence */
    Arrays.fill(maxLIS, 1);


    /**
     *
     */
    for (int curIdx = 1; curIdx < arr.length; curIdx++)
    {
        for (int beginIdx = 0; beginIdx <= curIdx - 1; beginIdx++)
        {
            if (arr[curIdx] > arr[beginIdx])
            {
                if (maxLIS[curIdx] < maxLIS[beginIdx] + 1)
                {
                    //System.out.print(arr[curIdx] + "  ");
                    maxLIS[curIdx] = maxLIS[beginIdx] + 1;
                }
            }
        }
    }

    int max = maxLIS[0];
    result = new int[arr.length];
    Arrays.fill(result, -1);

    int cpIdx = 0;
    for (int idx = 0; idx < maxLIS.length; idx++)
    {
        /* Put sequence at cpIdx   */
        if (-1 == result[maxLIS[idx] - 1])
        {
            result[cpIdx++] = arr[idx];
        }
    }

    /*  Print sequence       */
    for (int idx = 0; idx < result.length; idx++)
    {
        System.out.print(result[idx] + " ");
    }
}

public static void main(String[] args)
{
    int[] arr = {1, 2, 5, 3, 7};
    LIS.getLCS(arr);
}

}

`

[1, 2, 3, 3, 4] ----------------------------------------------------------------------------------------------------------------------------------------- Q2. Given a vectors of numbers of fixed length, for example: v1 = [4, 3, 1, 2] v2 = [2, 4, 3, 5] The relationship nested between two vectors is defined as follows: if the corresponding entries of a vector are all smaller than the other vector, after rearranging entries of vector if needed, then first vector is said to be nested in the other. Example Not nested v1 - [4, 3, 1, 2] v2 - [2, 4, 3, 5] v2 - [2, 4, 3, 5] v1 - [4, 3, 1, 2] After re-arranging: Nested v1 - [4, 3, 1, 2] v2 - [5, 4, 2, 3] Hence v1 is nested in v2. Given a pair of such vectors , write a function as follows: function isNested(Vec a, Vec b); Result: -1 if a is nested in b 1 if b is nested in a 0 if nesting is not possible. ---------------------------------------------------------------------------------------------------------------------- Q3. Given a list of numbers in random order. Is it possible to pair all elements in the list in such a way that no two pairs share an element and the sum of elements in a pair is divisible by 101. Example: v1 [ 1, 100, 1] Ans: No v2 [1, 100, 100, 1] [2, 98, 101, 1] Ans: Yes v3 [1, 200, 100, 100, 2, 1] Ans: yes