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]