| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | package mainfunc maximumGap(nums []int) int {	n := len(nums)	if n < 2 {		return 0	}	min, max := nums[0], nums[0]	for i := 1; i < n; i++ {		if nums[i] < min {			min = nums[i]		}		if nums[i] > max {			max = nums[i]		}	}	minMaxGap := (max - min) / (n - 1)	if minMaxGap == 0 {		minMaxGap++	}	bucketNum := (max-min)/minMaxGap + 1 // Bucket sort, divide the whole area into buckets	bucketMin := make([]int, bucketNum)	bucketMax := make([]int, bucketNum)	used := make([]bool, bucketNum)	for i := 0; i < n; i++ {		idx := (nums[i] - min) / minMaxGap		if !used[idx] {			bucketMin[idx] = nums[i]			bucketMax[idx] = nums[i]			used[idx] = true			continue		}		if nums[i] < bucketMin[idx] {			bucketMin[idx] = nums[i]		}		if nums[i] > bucketMax[idx] {			bucketMax[idx] = nums[i]		}	}	prevBucketMax, maxGap := min, 0	for i := 0; i < bucketNum; i++ {		if used[i] {			if bucketMin[i]-prevBucketMax > maxGap {				maxGap = bucketMin[i] - prevBucketMax			}			prevBucketMax = bucketMax[i]		}	}	return maxGap}// func main() {// 	println(maximumGap([]int{3, 6, 9, 1}), 3)// 	println(maximumGap([]int{1, 1, 1, 1}), 0)// 	println(maximumGap([]int{100, 3, 2, 1}), 97)// 	println(maximumGap([]int{10}), 0)// }
 |