双指针,先找到最高点,左边用双指针的时候只要关注更新left就可以了,因为右边有最高点,右边的话只要关注更新right就可以了
import java.util.*;
public class Solution {
/**
* max water
* @param arr int整型一维数组 the array
* @return long长整型
*/
public long maxWater (int[] arr) {
// write code here
long water=0;
int n=arr.length;
if(n==0){
return 0;
}
int maxIndex=0;
int maxValue=0;
for(int i=0;i<n;i++){
if(arr[i]>=maxValue){
maxValue=arr[i];
maxIndex=i;
}
}
int left=0;
int right=left+1;
while(right<maxIndex){
if(arr[left]>arr[right]){
water+=arr[left]-arr[right];
right++;
}
else {
left=right;
right=left+1;
}
}
right=n-1;
left=right-1;
while(left>maxIndex){
if(arr[right]>arr[left]){
water+=-arr[left]+arr[right];
left--;
}
else {
right=left;
left=right-1;
}
}
return water;
}
}