189. 旋转数组
题目
代码
class Solution {
public:
void rotate(vector<int>& nums, int k) {
if(nums.size()==0||nums.size()==1)
return;
if(k>nums.size())
{
k%=nums.size();
}
int movNum=nums.size()-k;
swap(nums,0,movNum);
swap(nums,movNum,nums.size());
swap(nums,0,nums.size());
}
//将数组从[begin,end)进行逆转 (直接用reverse也可以)
void swap(vector<int>&nums,int begin,int end)
{
for(int i=begin,j=end-1;i!=j&&i<=j;i++,j--)
{
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
};
思路
比如[1,2,3,4,5]要右移2个位置,则把前面的3个元素逆转为[3,2,1,4,5],再逆转后面的2个元素[3,2,1,5,4],然后再整体逆转[4,5,1,2,3]。答案即求出。
https://github.com/li-zheng-hao