
2025-04-29:高度互不相同的最大塔高和。用go语言,给定一个数组 maximumHeight,其中 maximumHeight[i] 表示第 i 座塔允许的最高高度限制。
要求为每座塔赋予一个高度,满足以下条件:
1.高度是正整数,且不超过对应的 maximumHeight[i]。
2.所有塔的高度互不相同。
目标是使所有塔高度之和最大化。若不存在满足条件的高度分配方案,则返回 -1。
1 <= maximumHeight.length <= 100000。
1 <= maximumHeight[i] <= 1000000000。
输入:maximumHeight = [2,3,4,3]。
输出:10。
解释:
我们可以将塔的高度设置为:[1, 2, 4, 3] 。
题目来自leetcode3301。
maximumHeight 数组按照从大到小的顺序排序。这一步的目的是优先处理较大的高度限制,为后续的塔分配更大的调整空间,从而最大化总和。-1。-1。package main
import (
"fmt"
"slices"
)
func maximumTotalSum(maximumHeight []int)int64 {
slices.SortFunc(maximumHeight, func(a, b int)int { return b - a })
ans := maximumHeight[0]
for i := 1; i < len(maximumHeight); i++ {
maximumHeight[i] = min(maximumHeight[i], maximumHeight[i-1]-1)
if maximumHeight[i] <= 0 {
return-1
}
ans += maximumHeight[i]
}
returnint64(ans)
}
func main() {
maximumHeight := []int{2, 3, 4, 3}
result := maximumTotalSum(maximumHeight)
fmt.Println(result)
}

# -*-coding:utf-8-*-
defmaximum_total_sum(maximum_height):
maximum_height.sort(reverse=True)
ans = maximum_height[0]
for i inrange(1, len(maximum_height)):
maximum_height[i] = min(maximum_height[i], maximum_height[i - 1] - 1)
if maximum_height[i] <= 0:
return -1
ans += maximum_height[i]
return ans
if __name__ == "__main__":
maximum_height = [2, 3, 4, 3]
result = maximum_total_sum(maximum_height)
print(result)