随便乱打的,懒得优化了。花了大概40多分钟吧,我在算法上属实是极不擅长。 这方法是O(n)时间是O(1)空间没错,不过还是可以更快一些的,可以找个变量存储一下局部最高值,这样可以省去回扫的时间

#
# max water
# @param arr int整型一维数组 the array
# @return long长整型
#
class Solution:
    def maxWater(self , arr ):
        # write code here
        ls = arr[0]
        total = 0
        total_cur = 0
        lsDist = 0
        for i in range(len(arr)):
            if arr[i] < ls:
                total_cur += (ls - arr[i])
                lsDist += 1
            else:
                total += total_cur
                total_cur = 0
                ls = arr[i]
                lsDist = 0

        start = len(arr) - 1
        end = len(arr) - 2 - lsDist
        ls = arr[len(arr) - 1]
        total_cur = 0
        lsDist = 0
        for i in range(start, end, -1):
            if arr[i] < ls:
                total_cur += (ls - arr[i])
                lsDist += 1
            else:
                total += total_cur
                total_cur = 0
                ls = arr[i]
                lsDist = 0
        return total