给你一个数组 maximumHeight
,其中 maximumHeight[i]
表示第 i
座塔可以达到的 最大 高度。
你的任务是给每一座塔分别设置一个高度,使得:
- 第
i
座塔的高度是一个正整数,且不超过maximumHeight[i]
。 - 所有塔的高度互不相同。
请你返回设置完所有塔的高度后,可以达到的 最大 总高度。如果没有合法的设置,返回 -1
。
示例 1:
输入:maximumHeight = [2,3,4,3]
输出:10
解释:我们可以将塔的高度设置为:
[1, 2, 4, 3]
。
示例 2:
输入:maximumHeight = [15,10]
输出:25
解释:我们可以将塔的高度设置为:
[15, 10]
。
示例 3:
输入:maximumHeight = [2,2,1]
输出:-1
解释:无法设置塔的高度为正整数且高度互不相同。
提示:
1 <= maximumHeight.length <= 10^5
1 <= maximumHeight[i] <= 10^9
我的解答
class Solution {
public long maximumTotalSum(int[] maximumHeight) {
Arrays.sort(maximumHeight);
int n = maximumHeight.length;
long res = maximumHeight[n-1];
// 倒序,从大到小遍历排好序的数组
for(int i = n - 2; i >= 0; i--){
// 与上一塔的高度-1做比较,如果当前塔高度要比上一塔高或者相同,则等于上一塔的高度-1,否则保持当前塔高度不变
// 即前面的塔高度保持低于后面塔的高度
maximumHeight[i] = Math.min(maximumHeight[i],maximumHeight[i + 1] -1);
if(maximumHeight[i] <= 0) return -1;
res += maximumHeight[i];
}
return res;
}
}