思路:
当前元素接水量=有效最大桶高(左边最大桶高和右边最大桶高的较低者)-当前元素值(桶底)
1、找到每个元素左右两边的最大桶高,如最大桶高小于当前元素值,最大桶高值取当前元素值。
2、取每个元素对应的左边最大桶高和右边最大桶高的较低者作为有效最大桶高。
3、用第2步的每个元素对应的有效桶高-桶底值(元素值)并加和,即得到总接水量。
import java.util.*; public class Solution { /** * max water * @param arr int整型一维数组 the array * @return long长整型 */ public long maxWater (int[] arr) { long points = 0; if(arr==null || arr.length<3){ return 0; } int maxLeft = 0;//当前元素左边最大值 int maxRight = 0;//当前元素右边最大值 int[] leftMargins = new int[arr.length];//每个元素对应的桶左最大值 int[] rightMargins = new int[arr.length];//每个元素对应的桶右最大值 for(int i=0;i<arr.length;i++){//获取每个元素对应的桶左最大值 if(arr[i]>maxLeft){ maxLeft=arr[i]; } leftMargins[i]=maxLeft; } for(int i=arr.length-1;i>=0;i--){//获取每个元素对应的桶由最大值 if(arr[i]>maxRight){ maxRight=arr[i]; } rightMargins[i]=maxRight; } for(int i=0;i<arr.length;i++){//获取每个元素上可接水量 points += (rightMargins[i]>leftMargins[i]?leftMargins[i]:rightMargins[i])-arr[i]; } return points; } }
![]()