leetcode_rust/
rotate_array.rs1#![allow(dead_code)]
2
3pub 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}