Skip to content

Commit 4832eb2

Browse files
committed
maximum_gap
1 parent 7b3eef0 commit 4832eb2

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ Golang solution for leetcode. For each problem, there is a simple *_test.go to t
141141
#### [155. Min Stack](https://github.com/hitzzc/go-leetcode/tree/master/min_stack)
142142
#### [160. Intersection of Two Linked Lists](https://github.com/hitzzc/go-leetcode/tree/master/intersection_of_two_linked_lists)
143143
#### [162. Find Peak Element](https://github.com/hitzzc/go-leetcode/tree/master/find_peak_element)
144-
144+
#### [164. Maximum Gap](https://github.com/hitzzc/go-leetcode/tree/master/maximum_gap)
145145

146146

147147

maximum_gap/maximum_gap.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package maximum_gap
2+
3+
func maximumGap(nums []int) int {
4+
if len(nums) < 2 {
5+
return 0
6+
}
7+
max, min := nums[0], nums[0]
8+
for i := 1; i < len(nums); i++ {
9+
if nums[i] > max {
10+
max = nums[i]
11+
}
12+
if nums[i] < min {
13+
min = nums[i]
14+
}
15+
}
16+
bucketSize := (max-min)/len(nums) + 1
17+
bucket := make([][]int, len(nums))
18+
for i := range nums {
19+
idx := (nums[i] - min) / bucketSize
20+
if len(bucket[idx]) == 0 {
21+
bucket[idx] = []int{nums[i], nums[i]}
22+
} else {
23+
if nums[i] < bucket[idx][0] {
24+
bucket[idx][0] = nums[i]
25+
}
26+
if nums[i] > bucket[idx][1] {
27+
bucket[idx][1] = nums[i]
28+
}
29+
}
30+
}
31+
ret := bucket[0][1] - bucket[0][0]
32+
pre := 0
33+
for i := 1; i < len(nums); i++ {
34+
if len(bucket[i]) == 0 {
35+
continue
36+
}
37+
if bucket[i][0]-bucket[pre][1] > ret {
38+
ret = bucket[i][0] - bucket[pre][1]
39+
}
40+
pre = i
41+
}
42+
return ret
43+
}

0 commit comments

Comments
 (0)