给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

    方法一:
    先把后k位存在新数组当中,再让原数组中的所有元素都后移,最后将新数组当中存的后k位放在前k位

    注意

    1. 可能会出现k>nums.size()的情况,所以应该在一开始就k=k%nums.size()
    2. 下标千万要看清楚,哪里变换到哪里了
    3. 这里要注意,返回值为空,所以只能修改原数组
      1. class Solution {
      2. public:
      3. void rotate(vector<int>& nums, int k) {
      4. k=k%nums.size();
      5. vector<int>temp(k+1);
      6. for(int i=nums.size()-k,j=0;i<=nums.size()-1; )
      7. {
      8. temp[j++]=nums[i++];
      9. }
      10. int r=nums.size()-1,l=nums.size()-k-1;
      11. while(l>=0)
      12. {
      13. nums[r--]=nums[l--];
      14. }
      15. for(int i=0;i<k;i++)
      16. {
      17. nums[i]=temp[i];
      18. }
      19. }
      20. };
      题解2:
      由观察可得,原数组中下标为i位置的元素存在了新数组下标为(i+k)%n位置中,再将新数组赋值给原数组就可以了
      class Solution {
      public:
       void rotate(vector<int>& nums, int k) {
             int n=nums.size();
             vector<int>temp(n);
             for(int i=0;i<n;i++)
             {
                 temp[(i+k)%n]=nums[i];
             }
             nums.assign(temp.begin(),temp.end());
       }
      };
      
      方法三:数组翻转
      image.png