R8-双指针篇
转战java后端的第一天,学点java语法(手动狗头)
这题之前写过多种解法
下面我们使用前后缀分离法解决。
class Solution {
public int trap(int[] height) {
int n = height.length;
//表示height[0]到height[i]的最大值
int[] preMax=new int[n];
preMax[0]=height[0];
for (int i=1;i<n;i++){
preMax[i]=Math.max(preMax[i-1],height[i]);
}
//sufMax[i]表示从height[i]到height[n-1]的最大值
int[] sufMax = new int[n];
sufMax[n-1]=height[n-1];
for (int i=n-2;i>=0;i--){
sufMax[i]=Math.max(sufMax[i+1],height[i]);
}
int ret=0;
for (int i=0;i<n;i++){
ret+=Math.min(preMax[i],sufMax[i])-height[i];
}
return ret;
}
}
原来java这些语言都这么快,真是用久了python不知道外面的天高地厚。