-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsingle-number-ii.rs
63 lines (55 loc) · 1.27 KB
/
single-number-ii.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
#![allow(dead_code, unused, unused_variables)]
fn main() {
assert_eq!(99, Solution::single_number(vec![0, 1, 0, 1, 0, 1, 99]));
assert_eq!(
2147483647,
Solution::single_number1(vec![
43,
16,
45,
89,
45,
-2147483648,
45,
2147483646,
-2147483647,
-2147483648,
43,
2147483647,
-2147483646,
-2147483648,
89,
-2147483646,
89,
-2147483646,
-2147483647,
2147483646,
-2147483647,
16,
16,
2147483646,
43
])
);
}
struct Solution;
impl Solution {
pub fn single_number(nums: Vec<i32>) -> i32 {
let mut r = 0;
let mut seen = 0;
for &i in nums.iter() {
r = !seen & (r ^ i);
seen = !r & (seen ^ i);
}
r
}
/// 使用hashset
/// 但是会溢出
pub fn single_number1(nums: Vec<i32>) -> i32 {
let mut h = std::collections::HashSet::new();
for &i in nums.iter() {
h.insert(i);
}
(h.iter().sum::<i32>() * 3 - nums.iter().sum::<i32>()) / 2
}
}