接雨水 Python 双指针 算法

from functools import lru_cache
class Solution:
    def trap(self, height):
        #define a pointer
        sum1=left=0
        #Move the left pointer to find a square larger than one.
        for i in range(len(height)):
            if height[i]>=1:
                left=i
                #stop look for that is greater than one of left_mark
                break
        while leftheight[left]:
                    max_pointer = -1
                    if rift_mark == left+1:
                        left = rift_mark
                        #stop the rift pointer
                        break
                    else:
                        sum1 += height[left] * (rift_mark-left-1) - sum(height[left+1:rift_mark])
                        left=rift_mark
                        break
                elif height[left]==height[rift_mark]:
                    max_pointer = -1
                    if rift_mark==left+1:
                        left = rift_mark
                        break
                    else:
                        sum1 += height[left] * (rift_mark-left-1) - sum(height[left+1:rift_mark])
                        break
                elif height[rift_mark] >= max_values and rift_mark != left+1:
                    max_values = height[rift_mark]
                    max_pointer = rift_mark
            if max_pointer > 0:
                sum1 += height[max_pointer] * (max_pointer - left -1) - sum(height[left+1:max_pointer])
                left = max_pointer
                break
            else:
                return sum1
        return sum1


nums = [0,10,0,10]
s = Solution()
print(f'data is {nums}')
print(f'sum is {s.trap(height=nums)}')

你可能感兴趣的:(算法,python,数据结构)