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

This challenge is in Data Structures > Arrays > Left Rotation.

pCloud Premium

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 solution in HackerRank

Like and share if you enjoyed this article!! 🙂

 

Esau Silva
Software Engineer at Region One ESC
Full Stack Software Engineer working with Microsoft technologies, ReactJS is awesome and avid Brazilian Jiu-Jitsu practitioner
If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed.
Share