This repository has been archived by the owner on Dec 20, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathremove-duplicates-from-sorted-array.rs
99 lines (91 loc) · 2.34 KB
/
remove-duplicates-from-sorted-array.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#![allow(unused)]
use std::usize;
struct Solution;
/// https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
impl Solution {
pub fn impl_1(nums: &mut Vec<i32>) -> i32 {
nums.dedup();
nums.len() as i32
}
pub fn impl_2(nums: &mut Vec<i32>) -> i32 {
let mut dup: Option<i32> = None;
nums.retain(|v| {
if let Some(d) = dup {
if d == *v {
return false;
} else {
dup = Some(*v);
}
} else {
dup = Some(*v);
}
true
});
nums.len() as i32
}
pub fn impl_3(nums: &mut Vec<i32>) -> i32 {
if nums.is_empty() {
return 0;
}
let mut dup = nums[0];
let mut idx: usize = 1;
while idx < nums.len() {
let v = nums[idx];
if v == dup {
nums.remove(idx);
} else {
dup = v;
idx += 1;
}
}
idx as i32
}
pub fn impl_4(nums: &mut [i32]) -> i32 {
if nums.is_empty() {
return 0;
}
let mut i = 0;
for j in 1..nums.len() {
if nums[i] != nums[j] {
i += 1;
nums[i] = nums[j];
}
}
i as i32 + 1
}
pub fn remove_duplicates(nums: &mut [i32]) -> i32 {
// Self::impl_1(nums)
// Self::impl_2(nums)
// Self::impl_3(nums)
Self::impl_4(nums)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn impl_1() {
let mut n = vec![0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
let r = Solution::impl_1(&mut n) as usize;
assert_eq!(&n[..r], &[0, 1, 2, 3, 4]);
}
#[test]
fn impl_2() {
let mut n = vec![0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
let r = Solution::impl_2(&mut n) as usize;
assert_eq!(&n[..r], &[0, 1, 2, 3, 4]);
}
#[test]
fn impl_3() {
let mut n = vec![0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
let r = Solution::impl_3(&mut n) as usize;
assert_eq!(&n[..r], &[0, 1, 2, 3, 4]);
}
#[test]
fn impl_4() {
let mut n = vec![0, 0, 1, 1, 1, 2, 2, 3, 3, 4];
let r = Solution::impl_4(&mut n) as usize;
assert_eq!(&n[..r], &[0, 1, 2, 3, 4]);
}
}
fn main() {}