动态规划
public int trap(int[] A) {
int a=0;int b=A.length-1;
int max=0;
int leftmax=0;
int rightmax=0;
while(a<=b){
leftmax=Math.max(leftmax,A[a]);
rightmax=Math.max(rightmax,A[b]);
if(leftmax<rightmax){
max+=(leftmax-A[a]); // leftmax is smaller than rightmax, so the (leftmax-A[a]) water can be stored
a++;
}
else{
max+=(rightmax-A[b]);
b--;
}
}
return max;
}
二分查找
public class Solution {
public int trap(int[] A) {
int n=A.length;
if(n <= 2) return 0;
//sum
//
int maxid=0;
for(int i=0;i<n;i++)
{
if(A[i]>A[maxid])
{
maxid=i;
}
}
//已找到最高值
int water=0;
int cur_high=A[0];
for(int i = 1;i<maxid;i++)
{
if(A[i]>cur_high) cur_high=A[i];
else water+=cur_high-A[i];
}
cur_high=A[n-1];
for(int i=n-2;i>maxid;i--)
{
if(A[i]>cur_high) cur_high=A[i];
else water+=cur_high-A[i];
}
return water;
}
}