Ponytai1 2016-10-24 04:42 采纳率: 25%
浏览 1377

算法:数组循环移动问题

有n个元素,右移k位,一种数组循环右移的方法是:1 2 3 4 5 6 ,移2位,将1移到3,3移到5,5移到1,结束。移2到4,4到6,6到2,结束。 一共2组,2正好就是2 ,6 的最大公约数。

即每个元素m移到(m+k) % n的位置上,而(m+k)%n移到(m+2k)%n的位置上……
当n与k互质时,可以证明m, m+k, m+2k, ..., m + (n-1)k模n的结果互不相等,刚好构成一个循环;否则,会构成(n,k)(n与k的最大公约数)个循环。分别处理这(n,k)个循环就可以得到结果。

这个公约数怎么来的啊,为什么正好是(n k) 最大公约数个循环呀。。?怎么想到的?

  • 写回答

1条回答 默认 最新

  • 蓝月心语 2016-10-24 05:11
    关注

    这个思想好奇怪啊,为什么要这么移动呢?往右边移动k位,我的想法是把右边k个数逆序,把剩余数逆序,把所有数逆序;得到结果

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘