Rotate an array of n elements to the right by k steps.
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?
题目很简单,不过要注意 它可没说 k 一定小于 n,因为开始没想到这一点,
第一次提交 就RE了:
Submission Details
Status: Runtime Error
Last executed input: [1,2,3,4,5,6], 11
O(1)空间复杂 度的算法:
Could you do it in-place with O(1) extra space?
题目很简单,不过要注意 它可没说 k 一定小于 n,因为开始没想到这一点,
第一次提交 就RE了:
Submission Details
Status: Runtime Error
Last executed input: [1,2,3,4,5,6], 11
O(1)空间复杂 度的算法:
Runtime: 11 ms
void reverse(int nums[], int s, int e){
int temp;
while(e - s > 0 ){
temp = *(nums + s);
*(nums + (s++))= *(nums + e);
*(nums + (e--)) = temp;
}
}
void rotate(int nums[], int n, int k){
k = k % n;
reverse(nums, n - k, n -1 );
reverse(nums, 0, n - k - 1);
reverse(nums, 0, n - 1);
}