dengxinyi 6 lat temu
rodzic
commit
29318972b7
2 zmienionych plików z 61 dodań i 4 usunięć
  1. 52 4
      hard/164.go
  2. 9 0
      hard/174.go

+ 52 - 4
hard/164.go

@@ -1,9 +1,57 @@
 package main
 
 func maximumGap(nums []int) int {
-	return 0
+	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() {
-
-}
+// 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)
+// }

+ 9 - 0
hard/174.go

@@ -0,0 +1,9 @@
+package main
+
+func calculateMinimumHP(dungeon [][]int) int {
+	return 0
+}
+
+func main() {
+
+}