赞
踩
闲谈:每次读 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; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。