leetcode_rust/
rotate_array.rs

1#![allow(dead_code)]
2
3// rotate array in-place by temp array
4pub fn rotate(nums: &mut Vec<i32>, k: i32) {
5    if nums.len() < 2 {
6        return;
7    }
8    let k = k as usize % nums.len();
9    let mid = nums.len() - k - 1;
10    let mut temp = Vec::new();
11    for i in mid + 1..nums.len() {
12        temp.push(nums[i]);
13    }
14    for i in (0..=mid).rev() {
15        nums[i + k] = nums[i];
16    }
17    for i in 0..k {
18        nums[i] = temp[i];
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test1() {
28        let mut nums = vec![1, 2, 3, 4, 5, 6, 7];
29        let k = 3;
30        rotate(&mut nums, k);
31        assert_eq!(nums, vec![5, 6, 7, 1, 2, 3, 4]);
32
33        let mut nums = vec![-1, -100, 3, 99];
34        let k = 2;
35        rotate(&mut nums, k);
36        assert_eq!(nums, vec![3, 99, -1, -100]);
37
38        let mut nums = vec![1, 2];
39        let k = 2;
40        rotate(&mut nums, k);
41        assert_eq!(nums, vec![1, 2]);
42
43        let mut nums = vec![1, 2, 3];
44        let k = 2;
45        rotate(&mut nums, k);
46        assert_eq!(nums, vec![2, 3, 1]);
47    }
48}