题解 | #旋转数组#

旋转数组

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

##遍历赋值算法##

对于数组中每个元素我直接将它们定位到该去的位置,尽最大可能去减少了移动次数,而且只用了一个int tmp保存临时数据,但是时间复杂度上为什么还是超过不了大多数的C++提交,啊,很困惑。代码在下面,感兴趣的自己看吧。

class Solution { public: /** * 旋转数组 * @param n int整型 数组长度 * @param m int整型 右移距离 * @param a int整型vector 给定数组 * @return int整型vector */ vector solve(int n, int m, vector& a) { // write code here // 依次改变每一个值即可,但会遇到不能遍历完全的问题(当两个数不是互质时) // 先去除冗余的n m = m % n; if(m==0) return a; if(n==1) return a; int maxGroup = gcd(n,m); int start = 0; while(start<maxGroup){ int i = start; int tmpValue = a[i]; while(1){ int nextIndex = (i-m+n)%n; // 遇到第一个数时,跳出 if(nextIndex == start) break; // 否则,进行遍历赋值 a[i] = a[nextIndex]; i=nextIndex; } a[i]=tmpValue; start++; } return a; } int gcd(int m,int n){ if(m%n==0) return n; return gcd(n,m%n); } };

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
挥毫自在:想白嫖你呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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