leetcode_rust/
remove_duplicates_2.rs1#![allow(dead_code)]
2
3pub fn remove_duplicates(nums: &mut Vec<i32>) -> i32 {
4 if nums.len() <= 2 {
5 return nums.len() as i32;
6 }
7 let mut count = 0;
8 let mut twice = false;
9 for i in 0..nums.len() - 1 {
10 if nums[i] != nums[i + 1] {
11 twice = false;
12 count += 1;
13 nums[count] = nums[i + 1];
14 } else if nums[i] == nums[i + 1] && !twice {
16 twice = true;
17 count += 1;
18 nums[count] = nums[i + 1];
19 }
20 }
21 count as i32 + 1
22}
23
24pub fn remove_duplicates2(nums: &mut Vec<i32>) -> i32 {
25 if nums.len() <= 2 {
26 return nums.len() as i32;
27 }
28
29 let mut i = 1;
30 let mut k = i - 1;
31 let mut j = i + 1;
32
33 while j < nums.len() {
34 if (nums[j] != nums[i]) || (nums[j] == nums[i] && nums[j] != nums[k]) {
35 k += 1;
36 nums[i + 1] = nums[j];
37 i += 1;
38 }
39 j += 1;
40 }
41
42 (i + 1) as i32
43}
44
45pub fn remove_duplicates3(nums: &mut Vec<i32>) -> i32 {
47 let mut i = 0;
48 for j in 0..nums.len() {
49 if j < 2 || nums[j] > nums[i - 2] {
50 nums[i] = nums[j];
51 i += 1;
52 }
53 }
54 i as i32
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn test1() {
63 let mut nums = vec![1, 1, 1, 2, 2, 3];
64 assert_eq!(remove_duplicates(&mut nums), 5);
65
66 let mut nums = vec![0, 0, 1, 1, 1, 1, 2, 3, 3];
67 assert_eq!(remove_duplicates(&mut nums), 7);
68
69 let mut nums = vec![1, 1, 1, 2, 2, 3];
70 assert_eq!(remove_duplicates(&mut nums), 5);
71 }
72
73 #[test]
74 fn test2() {
75 let mut nums = vec![1, 1, 1, 2, 2, 3];
76 assert_eq!(remove_duplicates2(&mut nums), 5);
77
78 let mut nums = vec![0, 0, 1, 1, 1, 1, 2, 3, 3];
79 assert_eq!(remove_duplicates2(&mut nums), 7);
80
81 let mut nums = vec![1, 1, 1, 2, 2, 3];
82 assert_eq!(remove_duplicates2(&mut nums), 5);
83 }
84
85 #[test]
86 fn test3() {
87 let mut nums = vec![1, 1, 1, 2, 2, 3];
88 assert_eq!(remove_duplicates3(&mut nums), 5);
89
90 let mut nums = vec![0, 0, 1, 1, 1, 1, 2, 3, 3];
91 assert_eq!(remove_duplicates3(&mut nums), 7);
92
93 let mut nums = vec![1, 1, 1, 2, 2, 3];
94 assert_eq!(remove_duplicates3(&mut nums), 5);
95 }
96}