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);
Like and share if you enjoyed this article!! 🙂
[bottomads][/bottomads]