1
1
pub struct Solution { }
2
2
3
3
impl Solution {
4
- pub fn maximum_gap ( nums : Vec < i32 > ) -> i32 { }
4
+ pub fn maximum_gap ( nums : Vec < i32 > ) -> i32 {
5
+ /*!
6
+ 使用 bucket sort 实现
7
+ 思路:控制每个 bucket 的范围小于最小值和最大值之间元素数量不变,但是等间隔时的间隔范围
8
+ 判断 buckets 之间前一个 bucket 的最大值和后一个 bucket 的最小值之差,取结果中的最大值
9
+ */
10
+ if nums. len ( ) < 2 {
11
+ return 0 ;
12
+ }
13
+
14
+ let lo = nums. iter ( ) . min ( ) . unwrap ( ) ;
15
+ let hi = nums. iter ( ) . max ( ) . unwrap ( ) ;
16
+ if lo == hi {
17
+ return 0 ;
18
+ }
19
+
20
+ let mut buckets = vec ! [ vec![ ] ; nums. len( ) + 1 ] ;
21
+ for n in nums. iter ( ) {
22
+ let index = ( n - lo) as usize * ( nums. len ( ) - 1 ) / ( hi - lo) as usize ;
23
+ buckets[ index] . push ( * n) ;
24
+ }
25
+ let pairs = buckets
26
+ . iter ( )
27
+ . filter ( |b| b. len ( ) > 0 )
28
+ . map ( |b| ( * b. iter ( ) . min ( ) . unwrap ( ) , * b. iter ( ) . max ( ) . unwrap ( ) ) )
29
+ . collect :: < Vec < ( i32 , i32 ) > > ( ) ;
30
+ let mut max_gap = 0 ;
31
+ for i in 0 ..pairs. len ( ) - 1 {
32
+ max_gap = max_gap. max ( pairs[ i + 1 ] . 0 - pairs[ i] . 1 ) ;
33
+ }
34
+ max_gap
35
+ }
5
36
}
6
37
7
38
#[ cfg( test) ]
@@ -25,4 +56,25 @@ mod tests {
25
56
let expected = 0 ;
26
57
it_works ( nums, expected) ;
27
58
}
59
+
60
+ #[ test]
61
+ fn submission_test_1 ( ) {
62
+ let nums = vec ! [ 1 , 10000000 ] ;
63
+ let expected = 9999999 ;
64
+ it_works ( nums, expected) ;
65
+ }
66
+
67
+ #[ test]
68
+ fn submission_test_2 ( ) {
69
+ let nums = vec ! [ 1 , 1 , 1 , 1 ] ;
70
+ let expected = 0 ;
71
+ it_works ( nums, expected) ;
72
+ }
73
+
74
+ #[ test]
75
+ fn submission_test_3 ( ) {
76
+ let nums = vec ! [ 1 , 1 , 1 , 1 , 1 , 5 , 5 , 5 , 5 , 5 ] ;
77
+ let expected = 4 ;
78
+ it_works ( nums, expected) ;
79
+ }
28
80
}
0 commit comments