1 个不稳定版本
0.1.1 | 2021年8月27日 |
---|
#9 in #rotate
9KB
83 行
rotation
更高效算法的想法来源于 这个问题 的 stack overflow 回答。
引用回答者的话,“反转三次是最简单的,但每个元素正好移动两次,需要 O(N)
时间和 O(1)
空间。也可以在 O(N)
时间和 O(1)
空间内移动数组,使每个元素正好移动一次。”
有关如何汇总更多信息,请参阅答案(以及其他答案)。
此包公开了2个API,即用于顺时针旋转列表的 rotate_clock
函数,以及用于逆时针旋转的 rotate_anticlock
。以下给出两个示例,演示如何使用它们。
快速开始
use rotation::interface as rotator;
fn main() {
let mut list = [1, 2, 3, 4, 5];
let spin = 2;
// rotate clockwise
let rotated = rotator::rotate_clock(&mut list, spin);
println!("{:?}", rotated); // [4, 5, 1, 2, 3];
// rotate anti clockwise
let rotated = rotator::rotate_anticlock(&mut list, spin);
println!("{:?}", rotated); // [3, 4, 5, 1, 2];
}