难度:Medium
解题思路:
最开始的思路:蓄水池有左边界和右边界,有两种情况:左边界大于右边界;左边界小于右边界。遍历数组,把每个元素分别当作左边界,然后去寻找合适的右边界;反向遍历数组,把每个元素分贝当作右边界,然后去寻找合适的左边界。最后寻找最大值。这个思路是对的,但是遇到一个size特别大的数组,会LTE。只能换一个思路。
贪心算法:先把左右边界分别固定在数组首尾处,算出一个区域面积。左右边界肯定存在一个最小的。假设是左边的,如果要想在此基础上提高面积,需要找到比它大的元素。则左边界逐步+1,直到找到比它大的,构成一个新的蓄水池,与原来的比较面积,可能大、可能小、可能相等。有了新的蓄水池后,再进行重复操作。
代码如下:
1 | class Solution { |
代码结果:23ms,超过38.94%