classSolution: deftrap(self, height: List[int]) -> int: n = len(height) l, r, res = 0, n - 1, 0 while l < r: mn = min(height[l], height[r]) while l < r and height[l] <= mn: res += mn - height[l] l += 1 while l < r and height[r] <= mn: res += mn - height[r] r -= 1 return res
classSolution { public: inttrap(vector<int>& height){ int n = height.size(); int l = 0, r = n - 1; int res = 0; while (l < r) { int mn = min(height[l], height[r]); while (l < r && height[l] <= mn) { res += mn - height[l]; ++l; } while (l < r && height[r] <= mn) { res += mn - height[r]; --r; } } return res; } };
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classSolution { public: inttrap(vector<int>& height){ int left(0), right(height.size() - 1), ret(0); while (left < right) { automin(std::min(height[left], height[right])); if (min == height[left]) while (++left < right && height[left] < min) ret += min - height[left]; else while (left < --right && height[right] < min) ret += min - height[right]; } return ret; } };