题解 | #旋转数组#

旋转数组

https://www.nowcoder.com/practice/e19927a8fd5d477794dac67096862042

方法:翻转数组

可以很容易的知道右移次数等于数组的元素个数时等于没有移动,所以右移m位,其实等同于右移m%n位;

1、先翻转数组的所有元素;

2、翻转数组的前m个元素;

2、翻转数组的剩余n-m个元素。就可以得到右移m位的数组。

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
public:
    vector<int> solve(int n, int m, vector<int>& a) {
        // 特殊情况处理
        if (a.size() == 1 || m == 0)
            return a;
        // 右移位数
        m = m % n;
        // 翻转全部数组
        reverse(a.begin(), a.end());
        // 翻转数组前m个元素
        reverse(a.begin(), a.begin() + m);
        // 翻转数组剩余的元素
        reverse(a.begin() + m, a.end());

        return a;
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务