算法--模拟法

方法:三次翻转(推荐使用)
思路:
循环右移相当于从第mmm个位置开始,左右两部分视作整体翻转。即abcdefg右移3位efgabcd可以看成AB翻转成BA(这里小写字母看成数组元素,大写字母看成整体)。既然是翻转我们就可以用到reverse函数。
具体做法:
- step 1:因为mmm可能大于nnn,因此需要对nnn取余,因为每次长度为nnn的旋转数组相当于没有变化。
- step 2:第一次将整个数组翻转,得到数组的逆序,它已经满足了右移的整体出现在了左边。
- step 3:第二次就将左边的mmm个元素单独翻转,因为它虽然移到了左边,但是逆序了。
- step 4:第三次就将右边的n−mn-mn−m个元素单独翻转,因此这部分也逆序了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Solution { public : /** * 旋转数组 * @param n int整型 数组长度 * @param m int整型 右移距离 * @param a int整型vector 给定数组 * @return int整型vector */ vector< int > solve( int n, int m, vector< int >& a) { // write code here m = m% n; reverse(a.begin(),a.end()); reverse(a.begin(),a.begin()+m); reverse(a.begin()+m,a.end()); return a; } }; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)