扫描
题意:
一个一维地面,凹凸不平.给你一个数组,数组的每个数字x,代表地面这个位置的高度.
向这个地面灌水,问最多能留住多少水.
思路:
对每一个位置的水面高度,需要同时考虑它左边能承受的最大高度和右边能承受的最大高度,再取min.
它左边能承受的最大高度,实际上就是它左边所有位置高度的最大值,右边也是同理.
因此我们先从左往右扫描,一边更新最大高度,一边得到每个位置左边能承受的最大高度,然后从右往左扫描,得到右边能承受的最大高度.
最后每个位置取min,再减去它的高度,就是它能留住的水的体积,之后求个和即可.
时间复杂度是O(n).
总结:
把一个点的水面高度,分开成左右能承受的最大高度,然后从左往右扫描和从右往左扫描求解.