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
原文地址:https://www.cnblogs.com/lizhenghao126/p/11053654.html