HackerRank Solution in ES6 Javascript to Challenge: Arrays – Left Rotation

My solution to HackerRank challenge Left Rotation found under Data Structures > Arrays > Left Rotation.

[topads][/topads]

Left Rotation

A left rotation operation on an array of size n shifts each of the array’s elements 1 unit to the left. For example, if 2 left rotations are performed on array [1,2,3,4,5], then the array would become [3,4,5,1,2].

Given an array of n integers and a number, d, perform d left rotations on the array. Then print the updated array as a single line of space-separated integers.

Input Format

The first line contains two space-separated integers denoting the respective values of n (the number of integers) and d (the number of left rotations you must perform).
The second line contains n space-separated integers describing the respective elements of the array’s initial state.

Constraints

  • 1 <= n <= 105
  • 1 <= d <= n
  • 1 <= ai <= 106

Output Format

Print a single line of n space-separated integers denoting the final state of the array after performing d left rotations.

Sample Input

5 4
1 2 3 4 5

Sample Output

5 1 2 3 4

Explanation

When we perform d = 4 left rotations, the array undergoes the following sequence of changes:

[1,2,3,4,5] -> [2,3,4,5,1] -> [3,4,5,1,2] -> [4,5,1,2,3] -> [5,1,2,3,4]

Thus, we print the array’s final state as a single line of space-separated values, which is 5 1 2 3 4.

My Solution to this Challenge

I have two solutions.

Solution #1

This solution did not pass Test Case #8 because it was timing out due to the test case being super big. It was running fine (though a little slow) when running in my computer, but timing out in HackerRank.

Test Case #8 has a size of 73642 and the number for rotations are 60581

function processData(input) {
  const lines = input.split("\n");
  const rotations = lines[0].split(" ")[1];
  const numbers = lines[1].split(" ");

  for (var i = 0; i < rotations; i++) {
    numbers.push(numbers.shift());
  }

  let string = numbers.reduce((prev, number) => `${prev} ${number}`, "");
  console.log(string.trim());
}

Solution #2

This solution passed all of the test cases.

function processData(input) {
  const lines = input.split("\n");
  const size = lines[0].split(" ")[0];
  const rotations = lines[0].split(" ")[1];
  const numbers = lines[1].split(" ");

  let i = 0;
  const string = numbers
    .reduce((arr, number) => {
      arr[(i + (size - rotations)) % size] = number;
      i++;
      return arr;
    }, [])
    .reduce((prev, number) => `${prev} ${number}`, "");

  console.log(string.trim());
}

Bonus

With ES6 you can use spread syntax in console.log instead of using reduce helper to print the space separated numbers to console, but again, with Test Case #8 this was failing and running out of memory.

console.log(...numbers);

Open in HackerRank

Like and share if you enjoyed this article!! 🙂

[bottomads][/bottomads]

Spread the love

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.