189. Rotate Array

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求
Given an array, rotate the array to the right by k steps, where k is non-negative.
这里写图片描述
给定一个数组,将数组向右旋转k步。

2,题目思路
整体题目而言不是很难。如果是在O(n)的空间内完成,则重新创建一个vector然后错位进行赋值即可 。
如果在O(1)的空间完成,可以用自带的reverse的方法,先对前n-k个元素进行逆转,然后再对后k个元素进行逆转,最后再整体逆转,就可以得到符合条件的结果。
需要注意的是,k是可能大于数组的长度n的,因此在方法2中,先对k求一次余。

3,程序源码
方法1:

class Solution {
public:
    void rotate(vector<int>& nums, int k)
    {
        vector<int> numCopy (nums.begin(),nums.end());
        auto n = nums.size();
        for(int i = 0;i < n;i++)
        nums[(i+k)%n] = numCopy[i];
    }

};

方法2:

class Solution {
public:
    void rotate(vector<int>& nums, int k)
    {
        int n = nums.size();
        k = k%n;
        reverse(nums.begin(), nums.begin()+n-k);
        reverse(nums.begin()+n-k, nums.end());
        reverse(nums.begin(), nums.end());
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值