Wednesday, 27 Oct 2021

# Convert an array into another by repeatedly removing the last element and placing it at any arbitrary index

Convert an array into another by repeatedly removing the last element and placing it at any arbitrary indexGiven two arrays A[] and B[], both consisting of a permutation of first N natural numbers, the task is to count the minimum number of times the last array element is required to be shifted to any arbitrary position in the array A[] to make both the arrays A[] and B[] equal.Examples:Input: A[] = {1, 2, 3, 4, 5}, B[] = {1, 5, 2, 3, 4}Output:1Explanation:Initially, the array A[] is {1, 2, 3, 4, 5}. After moving the last array element, i.e. 5, and placing them between arr (= 1) and arr(= 2) modifies the array to {1, 5, 2, 3, 4}, which is the same as the array B[].Therefore, the minimum number of operations required to convert the array A[] to B[] is 1.Input: A[] = {3, 2, 1}, B[] = {1, 2, 3}Output: 2Explanation:Initially, the array A[] is {3, 2, 1}.Operation 1: After moving the last array element, i.e. 1, to the beginning of the array, modifies the array to {1, 3, 2}.Operation 2: After moving the last element of the array, i.e. 2 and placing them between the elements arr (= 1) and arr (= 3) modifies the array to {1, 2, 3}, which is the same as the array B[].Therefore, the minimum number of operations required to convert the array A[] to B[] is 2.Approach: The given problem can be solved by finding the first i consecutive elements of the first permutation which is the same as the subsequence of the second permutation, then the count of operations must be less at least (N – I), since the last (N – i) elements can be selected optimally and inserted at required indices. Therefore, (N – i) is the minimum number of steps required for the conversion of the array A[] to B[].Below is the implementation of the above approach:C++  #include using namespace std;  int minCount(int A[], int B[], int N){                int i = 0;              for (int j = 0; j < N; j++) {                          if (A[i] == B[j]) {            i++;        }    }              return N - i;}  int main(){    int A[] = { 1, 2, 3, 4, 5 };    int B[] = { 1, 5, 2, 3, 4 };      int N = sizeof(A) / sizeof(A);      cout