Rotate Array

来源:互联网 发布:mac软件删除不彻底 编辑:程序博客网 时间:2024/05/17 22:17

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].

题目明确要求了空间复杂度为O(1),那么肯定不能建立新的数组 。每次把最末尾的数移动到开头,移三次就得到最终结果。这样会超时

先翻转数组前n-k的部分,然后翻转数组后面k个数字,然后翻转整个数组。即: 

[4,3,2,1,5,6,7], 
[4,3,2,1,7,6,5], 

[5,6,7,1,2,3,4]

class Solution {public:    void rotate(int nums[], int n, int k) {        k%=n;//处理K大于n的情况        if(k<=0)return;        if(n<=1)return;               revert(nums,0,n-k-1);       revert(nums,n-k,n-1);       revert(nums,0,n-1);            }    void revert(int nums[],int begin,int end){    for(int i=begin,j=end;i<=j;i++,j--){        int temp=nums[i];        nums[i]=nums[j];        nums[j]=temp;    }    }        };


0 0