Find index after traversing a permutation Array of 1 to N by K steps

Last Updated : 20 May, 2021

Given an integer K and an index array arr[] of length N which contains elements in the range [1, N], the task is to find the index after traversing the array by K steps starting from the index 1.
Traversal of index array: In the traversal of the index array the next index to be visited is the value at the current index. 
Examples: 
 

Input: arr[] = {3, 2, 4, 1}, K = 5 
Output:
Explanation: 
Traversal to the indices starting from index 1: 
1 => 3 => 4 => 1 => 3 => 4 
Finally, after K traversals the index is 4
Input: arr[] = {6, 5, 2, 5, 3, 2}, K = 2 
Output:
 


 


Approach: The key observation in the problem is that after traversing the index array N times it repeats itself. Therefore, we can find the value of the K \% N  and then finally find the index after K \% N  traversal.
Below is the implementation of the above approach:
 

C++
// C++ implementation to find the 
// index after traversing the index 
// array K times

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

// Function to find the index after
// traversing the index array K times
int findIndexAfterKTrav(vector<int> arr,
                        int n, int k){
    k = k % n;
    int indi = 1;
    
    // Loop to traverse the index
    // array K times
    while (k){
        indi = arr[indi-1];
        k--;
    }
    
    return arr[indi-1];
}

// Driver Code
int main() {
    int n = 4, k = 5;
    vector<int> arr{3, 2, 4, 1};

    // Function Call
    cout << findIndexAfterKTrav(arr, n, k);
    return 0;
}
Java
// Java implementation to find the 
// index after traversing the index 
// array K times 
class GFG{
    
// Function to find the index after 
// traversing the index array K times
public static int findIndexAfterKTrav(int[] arr, 
                                      int n, int k)
{ 
    k = k % n; 
    int indi = 1; 
        
    // Loop to traverse the index 
    // array K times 
    while (k > 0)
    { 
        indi = arr[indi - 1]; 
        k--; 
    } 
    return arr[indi - 1]; 
} 

// Driver code
public static void main(String[] args) 
{
    int n = 4, k = 5; 
    int[] arr = { 3, 2, 4, 1 }; 
    
    // Function Call 
    System.out.print(findIndexAfterKTrav(arr, n, k));
}
}

// This code is contributed by divyeshrabadiya07
Python3
# Python3 implementation to find the
# index after traversing the index
# array K times

# Function to find the index after
# traversing the index array K times
def findIndexAfterKTrav(arr, n, k):
    
    k = k % n;
    indi = 1;

    # Loop to traverse the index
    # array K times
    while (k > 0):
        indi = arr[indi - 1];
        k -= 1;

    return arr[indi - 1];

# Driver code
if __name__ == '__main__':
    
    n = 4;
    k = 5;
    arr = [ 3, 2, 4, 1 ];

    # Function Call
    print(findIndexAfterKTrav(arr, n, k));

# This code is contributed by Princi Singh
C#
// C# implementation to find the 
// index after traversing the index 
// array K times 
using System;

class GFG{
     
// Function to find the index after 
// traversing the index array K times
public static int findIndexAfterKTrav(int[] arr, 
                                      int n, int k)
{ 
    k = k % n; 
    int indi = 1; 
         
    // Loop to traverse the index 
    // array K times 
    while (k > 0)
    { 
        indi = arr[indi - 1]; 
        k--; 
    } 
    return arr[indi - 1]; 
} 
 
// Driver code
public static void Main(String[] args) 
{
    int n = 4, k = 5; 
    int[] arr = { 3, 2, 4, 1 }; 
     
    // Function Call 
    Console.Write(findIndexAfterKTrav(arr, n, k));
}
}

// This code is contributed by Princi Singh
JavaScript
<script>

// Javascript implementation to find the 
// index after traversing the index 
// array K times

// Function to find the index after
// traversing the index array K times
function findIndexAfterKTrav(arr, n, k)
{
    k = k % n;
    var indi = 1;
    
    // Loop to traverse the index
    // array K times
    while (k){
        indi = arr[indi-1];
        k--;
    }
    
    return arr[indi-1];
}

// Driver Code
var n = 4, k = 5;
var arr = [3, 2, 4, 1];

// Function Call
document.write( findIndexAfterKTrav(arr, n, k));

// This code is contributed by itsok.
</script>   

Output: 
4

 
Comment