Ads Here

Saturday, June 4, 2022

Left-Rotation/Solution.java

 import java.io.*;

import java.math.*;

import java.security.*;

import java.text.*;

import java.util.*;

import java.util.concurrent.*;

import java.util.function.*;

import java.util.regex.*;

import java.util.stream.*;

import static java.util.stream.Collectors.joining;

import static java.util.stream.Collectors.toList;


class Result {


    /*

     * Complete the 'rotateLeft' function below.

     *

     * The function is expected to return an INTEGER_ARRAY.

     * The function accepts following parameters:

     *  1. INTEGER d

     *  2. INTEGER_ARRAY arr

     */

    

    public static int getGCD(int a, int b) {

        if (b==0) return a;

            return getGCD(b,a%b);

    }


    public static List<Integer> rotateLeft(int d, List<Integer> arr) {

    // Write your code here

        int n = arr.size();

        int gcd = getGCD(n,d);


        for(int i=0; i<gcd; i++){

            int temp = arr.get(i);

            int j = i;

            while(true){

                int k = j + d;

                if(k>=n)

                    k = k-n;

                if(k==i)

                    break;

                arr.set(j, arr.get(k));

                j = k;

            }

            arr.set(j, temp);

        }

        

        return arr;

    }


}


public class Solution {

    public static void main(String[] args) throws IOException {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));


        String[] firstMultipleInput = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");


        int n = Integer.parseInt(firstMultipleInput[0]);


        int d = Integer.parseInt(firstMultipleInput[1]);


        List<Integer> arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))

            .map(Integer::parseInt)

            .collect(toList());


        List<Integer> result = Result.rotateLeft(d, arr);


        bufferedWriter.write(

            result.stream()

                .map(Object::toString)

                .collect(joining(" "))

            + "\n"

        );


        bufferedReader.close();

        bufferedWriter.close();

    }

}

No comments:

Post a Comment