- Notifications
You must be signed in to change notification settings - Fork 116
/
Copy pathmaximum_gap.go
43 lines (42 loc) · 832 Bytes
/
maximum_gap.go
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
package maximum_gap
funcmaximumGap(nums []int) int {
iflen(nums) <2 {
return0
}
max, min:=nums[0], nums[0]
fori:=1; i<len(nums); i++ {
ifnums[i] >max {
max=nums[i]
}
ifnums[i] <min {
min=nums[i]
}
}
bucketSize:= (max-min)/len(nums) +1
bucket:=make([][]int, len(nums))
fori:=rangenums {
idx:= (nums[i] -min) /bucketSize
iflen(bucket[idx]) ==0 {
bucket[idx] = []int{nums[i], nums[i]}
} else {
ifnums[i] <bucket[idx][0] {
bucket[idx][0] =nums[i]
}
ifnums[i] >bucket[idx][1] {
bucket[idx][1] =nums[i]
}
}
}
ret:=bucket[0][1] -bucket[0][0]
pre:=0
fori:=1; i<len(nums); i++ {
iflen(bucket[i]) ==0 {
continue
}
ifbucket[i][0]-bucket[pre][1] >ret {
ret=bucket[i][0] -bucket[pre][1]
}
pre=i
}
returnret
}