For example, with n = 7 and k = 3, the array
[1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Hint:
Could you do it in-place with O(1) extra space?
Related problem: Reverse Words in a String IICould you do it in-place with O(1) extra space?
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
---
Solution: First Adjust k by doing k %= n so that we do not rotate redundantly.
Perform a three-reverse operation. It is either you know it or you don't.
http://articles.leetcode.com/2010/04/rotating-array-in-place.html
public class Solution {
public void rotate(int[] nums, int k) {
k %= nums.length;
reverse(nums, 0, nums.length - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.length - 1);
}
private void reverse(int[] nums, int first, int last) {
while (first < last) {
int temp = nums[first];
nums[first] = nums[last];
nums[last] = temp;
first++;
last--;
}
}
}
No comments:
Post a Comment