题目
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.
[show hint]
Hint:
Could you do it in-place with O(1) extra space?
题意
翻转k次形成目标数组
题解
C++代码
class Solution {
public:
void rotate(vector<int>& nums, int k) {
/*方法1: 逐个放置在另一个数组中
int len = nums.size();
vector<int>temp(len);
for(int i=0; i<len; i++)
{
temp[(i+k)%len] = nums[i];
}
for(int i=0; i<len; i++){
nums[i] = temp[i];
}
*/
/*方法2:利用翻转字符串的方法
1 2 3 4 5 6 7
4 3 2 1 7 6 5 先分别翻转1~len-k,len-k+1~len
5 6 7 1 2 3 4 翻转整个数组
*/
int len = nums.size();
if(k == 0 || k%len==0)
return;
k = k % len;
reverse(nums.begin(), nums.begin()+(len-k));
reverse(nums.begin()+(len-k), nums.end());
reverse(nums.begin(), nums.end());
}
};
python代码
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
def reverse(s, e):
while s < e:
nums[s],nums[e] = nums[e],nums[s]#简单的两数交换
s = s + 1
e = e - 1
n = len(nums)
k = k % n
if k==0:
return
reverse(0, n-k-1)
reverse(n-k, n-1)
reverse(0, n-1)