Skip to content

Commit 9d81a10

Browse files
committed
feat: resolved
1 parent 475ca4f commit 9d81a10

File tree

1 file changed

+53
-1
lines changed

1 file changed

+53
-1
lines changed

maximum_gap/src/lib.rs

+53-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,38 @@
11
pub struct Solution {}
22

33
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+
}
536
}
637

738
#[cfg(test)]
@@ -25,4 +56,25 @@ mod tests {
2556
let expected = 0;
2657
it_works(nums, expected);
2758
}
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+
}
2880
}

0 commit comments

Comments
 (0)