189. Rotate Array
Description
Given an array, rotate the array to the right by k steps, where k is non-negative.
Follow up:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Could you do it in-place with O(1) extra space?
Constraints
1 <= nums.length <= 2 * 10^4
It's guaranteed that
nums[i]
fits in a 32 bit-signed integer.k >= 0
Approach
Links
GeeksforGeeks
ProgramCreek
YouTube
Examples
Input: nums = [1, 2, 3, 4, 5, 6, 7], k = 3
Output: [5, 6, 7, 1, 2, 3, 4]
Explanation:
rotate 1 steps to the right: [7, 1, 2, 3, 4, 5, 6]
rotate 2 steps to the right: [6, 7, 1, 2, 3, 4, 5]
rotate 3 steps to the right: [5, 6, 7, 1, 2, 3, 4]
Solutions
/**
* Time complexity : O(n×k). All the numbers are shifted by one step(O(n))
* k times(O(n)).
* Space complexity : O(1). No extra space is used.
*/
class Solution {
public void rotate(int[] nums, int k) {
// speed up the rotation
k %= nums.length;
int temp, previous;
for (int i = 0; i < k; i++) {
previous = nums[nums.length - 1];
for (int j = 0; j < nums.length; j++) {
temp = nums[j];
nums[j] = previous;
previous = temp;
}
}
}
}
Follow up
Last updated
Was this helpful?