题目
题目链接
分析
闲谈:每次读 LeetCode 的题目描述都要费老大劲,o(╥﹏╥)o
题意:这个其实意思就是以数组的每一位作为最高点,这个点(数字)左右两边的数字都不能大于这个数字(可以等于),并且从这个数把这个数组劈开,从中心向左边看,必须递减或者相等,从中心向右看,必须递减或者相等,让我们求这个一顿操作后数组的最大值。
这个时候再结合题目给的实例,你就能看懂题意了。
按照上面的分析,我们就针对数组的每一个值,都进行一次操作,然后统计最大值就可以了。
代码
class Solution {
public long maximumSumOfHeights(List<Integer> maxHeights) {
// 最后返回的结果,
long max = 0;
for(int i = 0;i < maxHeights.size();i ++) {
int temp = maxHeights.get(i);
// 记录当前下标操作完数组后的和
long count = temp;
for(int j = i - 1;j >= 0;j --) {
temp = Math.min(temp,maxHeights.get(j));
count+=temp;
}
temp = maxHeights.get(i);
for(int j = i + 1;j < maxHeights.size();j ++) {
temp = Math.min(temp,maxHeights.get(j));
count += temp;
}
max = Math.max(max,count);
}
return max;
}
}