M 个位置的循环移位数组最快的算法是什么?
例如,[3 4 5 2 3 1 4]
移位 M = 2 个位置应该是[1 4 3 4 5 2 3]
.
多谢。
如果您想要 O(n) 时间并且不需要额外的内存使用(因为指定了数组),请使用 Jon Bentley 的书“Programming Pearls 2nd Edition”中的算法。它将所有元素交换两次。不如使用链表快,但使用更少的内存并且概念上简单。
shiftArray( theArray, M ):
size = len( theArray )
assert( size > M )
reverseArray( theArray, 0, size - 1 )
reverseArray( theArray, 0, M - 1 )
reverseArray( theArray, M, size - 1 )
reverseArray( anArray, startIndex, endIndex ) 将元素的顺序从 startIndex 反转到 endIndex(包括两端)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)