题解 | #旋转数组#

旋转数组

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++)

全部评论

相关推荐

人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
练习生懒羊羊:开飞机把这个公司创飞吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务