Original title address: https://oj.leetcode.com/problems/trapping-rain-water/
Test instructions
Given n non-negative integers representing an elevation map where the width of each bar are 1, compute how much WA ter It is the able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1] , return 6 .
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of the Rain Water (blue section) is being trapped. Thanks Marcos for contributing this image!
Problem-Solving Ideas: Simulation method. Open an array leftmosthigh,leftmosthigh[i] to the highest bar value before the a[i], and then start from behind, with Rightmax to record the maximum bar value encountered from the backward forward traversal, then min (Leftmosthigh[i], Rightmax)-a[i] is the amount of water that can be stored at the first bar. For example, when i=9, at this time leftmosthigh[9]=3, and rightmax=2, the water storage is 2-1=1, and so on. This method is still very ingenious. The time complexity is O (N).
Code:
classSolution:#@param A, a list of integers #@return An integer defTrap (self, A): Leftmosthigh= [0 forIinchRange (len (A))] Leftmax=0 forIinchRange (len (A)):ifA[i] > Leftmax:leftmax =A[i] Leftmosthigh[i]=Leftmax sum=0 Rightmax=0 forIinchReversed (range (len (A))):ifA[i] > Rightmax:rightmax =A[i]ifMin (Rightmax, leftmosthigh[i]) >a[i]: Sum+ = min (Rightmax, leftmosthigh[i])-A[i]returnSum