题目:
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.
分析:做了很久,开始分k次,每次完成第i次移动,在边界处不好处理,
分析知,移动的结果把数组分为2份,两份的次序颠倒一下即可
1 2 3 4 5 6 k=2
5 6 和1234这两份,只是把1 2 3 4放在了前面
代码:
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int temp;
int slength=nums.size();
k=k%slength;
int start=0;
int end=slength-1;
while(start<end)
{
swap(nums[start],nums[end]);
start++;
end--;
}
start=0;
end=k-1;
while(start<end)
{
swap(nums[start],nums[end]);
start++;
end--;
}
start=k;
end=slength-1;
while(start<end)
{
swap(nums[start],nums[end]);
start++;
end--;
}
}
};