旋转数组
问题简述
一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
要求:空间复杂度 O(1),时间复杂度 O(n)思路
根据移动规则,实际上每个数的最终位置是可以确定的;
通过取模操作顺序遍历整个数据即可,核心操作:
nxt = (cur + m) % n tmp, a[nxt] = a[nxt], tmp cur = nxt注意:
当
m > n时,m = m % n;m == 0时,直接返回;当
m整数n时,会遇到“循环”,即nxt == start,此时可以从nxt + 1重新开始;总遍历次数为n次;详见代码;
Last updated