189. Rotate Array

来源:互联网 发布:学校图书馆wind数据库 编辑:程序博客网 时间:2024/06/03 19:12

错误了好几次,本来尝试利用O(1)的空间复杂度处理,结果发现处理样本数为奇数时,效果还行,但是偶数时就会出现问题。
因此,最后并没有采用这种方式,而是利用了一个新的数组right,移位后赋值。

class Solution {public:    void rotate(vector<int>& nums, int k) {        if(nums.size()<=1)            return;        k=k%nums.size();        if(k==0)            return;        vector<int> right;        for(int i=nums.size()-k;i<nums.size();i++)            right.push_back(nums[i]);        for(int i=nums.size()-k-1;i>=0;i--)            nums[i+k]=nums[i];        for(int i=0;i<right.size();i++)            nums[i]=right[i];    }};

答案中有一种空间复杂度为O(1)的方法。例如[1,2,3,4,5,6,7], k=3
先对后3个逆序[7,6,5],再对前四个逆序[4,3,2,1],最后对总体逆序[5,6,7,1,2,3,4]。挺简单巧妙的方法。

0 0
原创粉丝点击