BM94 题解 | #接雨水问题#
接雨水问题
https://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
解题心得:
终于总算是彻底理解了这道题的意思,这道题的解法了,以前总是看不懂,现在彻底理解了,很简单,你就把数组的left、right边缘节点,看作是桶的边界,之后,这个边界还是动态更新的!
解题思路:
1、桶的盛水量由桶当前遍历的arr[left]、arr[right]的大小决定的,也就是桶高。
2、在遍历left、right的过程中,其实只走一遍的,要么走左,要么走右,
这样就可以快速的确定,可以盛水的地方。
3、也就是可以在一边往左边走,或者右边走的过程中,确定可盛的水量了。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * max water * @param arr int整型一维数组 the array * @return long长整型 */ public long maxWater (int[] arr) { if(arr.length<2) { return 0; } int left = 0; int right = arr.length -1; long water = 0; int maxL = 0, maxR = 0; // 左边、右边最大高度 while(left< right) { maxL = Math.max(maxL, arr[left]); maxR = Math.max(maxR, arr[right]); if(maxR > maxL) { water += maxL - arr[left++]; } else { water += maxR - arr[right--]; } } return water; } }