Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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

 


Last Updated : 20 May, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads