Array rotation means moving the elements of an array so that they shift positions. For example, in a left rotation by 1, the first element moves to the end, and all others move one step left.
Click to reveal answer
beginner
Explain left rotation by d positions on an array.
Left rotation by d means each element moves d steps to the left. The elements that go past the first position wrap around to the end of the array.
Click to reveal answer
intermediate
What is the reversal algorithm for array rotation?
The reversal algorithm rotates an array by reversing parts of it. For left rotation by d: reverse first d elements, reverse the rest, then reverse the whole array. This moves elements efficiently without extra space.
Click to reveal answer
advanced
How does the juggling algorithm work for array rotation?
The juggling algorithm divides the array into sets based on the greatest common divisor (GCD) of array size and rotation count. It moves elements within each set to rotate the array in place.
Click to reveal answer
intermediate
What is the time complexity of the reversal algorithm for array rotation?
The reversal algorithm runs in O(n) time, where n is the size of the array. It performs three reversals, each taking linear time, making it efficient and in-place.
Click to reveal answer
What happens to the first element in a left rotation by 1?
AIt moves to the end of the array
BIt stays in the first position
CIt moves to the middle of the array
DIt is removed from the array
✗ Incorrect
In left rotation by 1, the first element shifts to the last position.
Which algorithm uses the greatest common divisor (GCD) to rotate an array?
AJuggling algorithm
BReversal algorithm
CBubble sort
DInsertion sort
✗ Incorrect
The juggling algorithm divides the array into sets based on GCD to rotate elements.
How many times does the reversal algorithm reverse parts of the array for rotation?
ATwice
BThree times
COnce
DFour times
✗ Incorrect
It reverses first part, second part, then the whole array, totaling three reversals.
What is the space complexity of the reversal algorithm for array rotation?
AO(n)
BO(d)
CO(log n)
DO(1)
✗ Incorrect
The reversal algorithm rotates the array in place using constant extra space.
If an array has 7 elements and you rotate it left by 7, what is the result?
AArray is sorted
BArray is reversed
CArray remains the same
DArray is empty
✗ Incorrect
Rotating by the array size results in the same array.
Describe how to perform a left rotation on an array using the reversal algorithm.
Think about reversing parts to move elements to correct positions.
You got /4 concepts.
Explain the juggling algorithm for array rotation and how it uses the greatest common divisor (GCD).
Focus on how sets are formed and elements are moved.
You got /4 concepts.
Practice
(1/5)
1. What does rotating an array to the left by 2 positions mean for the array [1, 2, 3, 4, 5]?
easy
A. The last two elements move to the front, resulting in [4, 5, 1, 2, 3]
B. The first two elements move to the end, resulting in [3, 4, 5, 1, 2]
C. The array is reversed, resulting in [5, 4, 3, 2, 1]
D. The array remains unchanged
Solution
Step 1: Understand left rotation by 2
Left rotation by 2 means removing the first two elements and placing them at the end.
Step 2: Apply rotation on given array
Starting with [1, 2, 3, 4, 5], removing first two elements [1, 2] and appending them at the end gives [3, 4, 5, 1, 2].
Final Answer:
[3, 4, 5, 1, 2] -> Option B
Quick Check:
Left rotate by 2 = first 2 elements moved to end [OK]
Hint: Left rotate by k moves first k elements to the end [OK]
Common Mistakes:
Confusing left rotation with right rotation
Not moving elements but just swapping
Thinking rotation reverses the array
2. Which of the following Rust code snippets correctly rotates an array arr of length 5 to the right by 1 position?
easy
A. let rotated = [&arr[0..4], &arr[4..5]].concat();
B. let rotated = [&arr[1..5], &arr[0..1]].concat();
C. let rotated = [&arr[4..5], &arr[0..4]].concat();
D. let rotated = [&arr[3..5], &arr[0..3]].concat();
Solution
Step 1: Understand right rotation by 1
Right rotation by 1 means last element moves to front, rest shift right.
Step 2: Check code slices for correct order
let rotated = [&arr[4..5], &arr[0..4]].concat(); takes last element arr[4..5] and then first 4 elements arr[0..4], concatenating them correctly.
Final Answer:
let rotated = [&arr[4..5], &arr[0..4]].concat(); -> Option C
Quick Check:
Right rotate by 1 = last element + rest [OK]
Hint: Right rotate by 1 = last element + rest [OK]
Common Mistakes:
Using wrong slice indices
Concatenating slices in wrong order
Confusing left and right rotation slices
3. What is the output of the following Rust code?
let arr = vec![10, 20, 30, 40, 50];
let k = 2;
let n = arr.len();
let rotated: Vec<_> = arr.iter().cycle().skip(n - k).take(n).cloned().collect();
println!("{:?}", rotated);
medium
A. [20, 30, 40, 50, 10]
B. [30, 40, 50, 10, 20]
C. [50, 10, 20, 30, 40]
D. [40, 50, 10, 20, 30]
Solution
Step 1: Understand rotation logic in code
Code cycles array, skips n-k=3 elements, then takes n=5 elements, effectively right rotating by 2.
Step 2: Trace elements after skipping 3
Skipping first 3 elements: 10,20,30 skipped; next elements are 40,50, then cycle back 10,20,30.
Step 3: Collect 5 elements
Elements collected: 40, 50, 10, 20, 30.
Final Answer:
[40, 50, 10, 20, 30] -> Option D
Quick Check:
Right rotate by 2 = last 2 elements front [OK]
Hint: Cycle and skip n-k for right rotation [OK]
Common Mistakes:
Confusing skip count with k
Mixing left and right rotation logic
Not using cycle iterator correctly
4. The following Rust function is intended to left rotate an array by k positions. What is the bug?
fn left_rotate(arr: &mut [i32], k: usize) {
let n = arr.len();
for i in 0..k {
let temp = arr[i];
arr[i] = arr[n - k + i];
arr[n - k + i] = temp;
}
}
medium
A. It swaps wrong elements; rotation logic is incorrect
B. It causes index out of bounds error
C. It reverses the array instead of rotating
D. It does nothing because loop range is zero
Solution
Step 1: Analyze the swapping logic
The code swaps arr[i] with arr[n-k+i], which does not achieve left rotation but swaps wrong pairs.
Step 2: Understand correct rotation method
Left rotation requires shifting elements left and moving first k elements to end, not swapping like this.
Final Answer:
It swaps wrong elements; rotation logic is incorrect -> Option A
Quick Check:
Incorrect swap logic = wrong rotation [OK]
Hint: Rotation needs shift + append, not simple swaps [OK]
Common Mistakes:
Swapping instead of shifting elements
Using wrong indices for swapping
Assuming swap equals rotation
5. Given an array arr = [1, 2, 3, 4, 5, 6], how can you rotate it left by 4 positions using Rust slice operations without extra space?
hard
A. Reverse first 4 elements, reverse last 2 elements, reverse entire array
B. Reverse last 4 elements, reverse first 2 elements, reverse entire array
C. Reverse entire array, reverse last 2 elements, reverse first 4 elements
D. Reverse first 2 elements, reverse last 4 elements, reverse entire array
Solution
Step 1: Understand rotation by reversal method
Left rotate by k means reverse first k elements, reverse remaining, then reverse whole array.
Step 2: Apply to k=4, n=6
Reverse first 4 elements [1,2,3,4], reverse last 2 elements [5,6], then reverse entire array.
Final Answer:
Reverse first 4 elements, reverse last 2 elements, reverse entire array -> Option A
Quick Check:
Rotation by reversal = reverse k, reverse n-k, reverse all [OK]
Hint: Rotate left k = reverse first k, reverse rest, reverse all [OK]
Common Mistakes:
Reversing in wrong order
Mixing k and n-k segments
Using extra space instead of in-place reversal
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.