文章摘要
文章首先介绍了滚动数组的原始实现方法,该方法通过不断移动数组元素来达到旋转数组的目的是,但效率较低。随后,文章提出了改进方法,通过新建一个数组并按照旋转后的顺序填充新数组,最后再将新数组的内容拷贝回原数组,以实现旋转,这种方法的空间复杂度为O(n)。接着,文章进一步提出了利用数组翻转的技巧,将数组后移K位后,通过三次翻转操作实现旋转,这种方法避免了额外的空间开销。文章还详细介绍了翻转数组的操作方法,包括如何通过交换两个数的方法实现数组的翻转。最后,文章介绍了环状替换方法,通过递归求解最小公约数来确定一趟遍历的次数,并利用循环和交换操作实现数组的旋转。
滚动数组(旋转数组)
回首往昔:
c
改进:
后来做了一个改进,采用空间换取步长的方式,新建一个数组,旋转完成后拷贝过去即可。步长为:n+n=2n; 空间为O(n)
c
更进一步
翻转数组
将一个数组后移K位后,最后的kmodn个元素一定会移动到数组头部,
然后其余元素往后挪就可以了
所以利用这个,
将数组进行三次不同转置即可得到答案。
原始数组[1,2,3,4,5,6] n=6 ,k=2。
- 先将所有元素翻转,[6,5,4,3,2,1]
- 将[0,6mod2)这个区间的元素转置:[5,6,4,3,2,1]
- 因为我们第一次转置了所有元素,所以要将后面的数还原,将[6%2,n)这个区间的元素转置得到求解
c
环状替换:
c

本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 一日谣
评论
隐私政策
0/500
滚动到此处加载评论...
