1struct Sol2161;
5
6impl Sol2161 {
7 pub fn pivot_array(nums: Vec<i32>, pivot: i32) -> Vec<i32> {
8 let mut rst = vec![pivot; nums.len()];
9
10 let (mut left, mut right) = (0, nums.len() - 1);
11 for (l, r) in (0..nums.len()).zip((0..nums.len()).rev()) {
12 if nums[l] < pivot {
13 rst[left] = nums[l];
14 left += 1;
15 }
16 if nums[r] > pivot {
17 rst[right] = nums[r];
18 right -= 1;
19 }
20 }
21
22 println!(":: {:?}", rst);
23
24 rst
25 }
26}
27
28struct Sol2460;
30
31impl Sol2460 {
32 pub fn apply_operations(nums: Vec<i32>) -> Vec<i32> {
33 let mut nums = nums;
34 for i in 0..nums.len() - 1 {
35 match nums[i] == nums[i + 1] {
36 true => {
37 nums[i] *= 2;
38 nums[i + 1] = 0;
39 }
40 _ => (),
41 }
42 }
43
44 let mut vcopy = nums.to_vec();
45 vcopy.sort_by_key(|&v| if v > 0 { 0 } else { 1 });
46
47 println!("-> {:?}", vcopy);
48
49 for z in 0..nums.len() {
50 if nums[z] == 0 {
51 let mut swap = z;
52 while nums[swap] == 0 {
53 swap += 1;
54 if swap >= nums.len() {
55 return nums;
56 }
57 }
58 (nums[z], nums[swap]) = (nums[swap], nums[z]);
59 }
60 }
61
62 nums
63 }
64}
65
66#[cfg(test)]
67mod tests {
68 use super::*;
69
70 #[test]
71 fn test_2161() {
72 assert_eq!(
73 Sol2161::pivot_array(vec![9, 12, 5, 10, 14, 3, 10], 10),
74 vec![9, 5, 3, 10, 10, 12, 14]
75 );
76 assert_eq!(
77 Sol2161::pivot_array(vec![-3, 4, 3, 2], 2),
78 vec![-3, 2, 4, 3]
79 );
80 }
81
82 #[test]
83 fn test_2460() {
84 assert_eq!(
85 Sol2460::apply_operations(vec![1, 2, 2, 1, 1, 0]),
86 vec![1, 4, 2, 0, 0, 0]
87 );
88 assert_eq!(Sol2460::apply_operations(vec![0, 1]), vec![1, 0]);
89 assert_eq!(
90 Sol2460::apply_operations(vec![
91 847, 847, 0, 0, 0, 399, 416, 416, 879, 879, 206, 206, 206, 272
92 ]),
93 vec![1694, 399, 832, 1758, 412, 206, 272, 0, 0, 0, 0, 0, 0, 0]
94 );
95 }
96}