lc3301
从最大元素开始贪心
对数组降序排序后,让每个元素不超过前一个元素减1
若出现非正数则返回-1,否则计算数组元素总和
class Solution {
public:
long long maximumTotalSum(vector<int>& maximumHeight) {
ranges::sort(maximumHeight, greater()); // 从大到小排序
for (int i = 1; i < maximumHeight.size(); i++) {
maximumHeight[i] =min(maximumHeight[i], maximumHeight[i - 1] - 1);
if (maximumHeight[i] <= 0)
return -1;
}
return reduce(maximumHeight.begin(), maximumHeight.end(),0LL);
}
};