From b0f4a25411f89e6d13a1f53f8cb4b0ba78d4c60b Mon Sep 17 00:00:00 2001 From: Laksha-python Date: Fri, 28 Nov 2025 14:43:38 +0530 Subject: [PATCH 1/2] Improved space complexity to O(1) by using two pointers approach --- dynamic_programming/trapped_water.py | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/dynamic_programming/trapped_water.py b/dynamic_programming/trapped_water.py index 8bec9fac5fef..fb51621a5ac7 100644 --- a/dynamic_programming/trapped_water.py +++ b/dynamic_programming/trapped_water.py @@ -34,23 +34,23 @@ def trapped_rainwater(heights: tuple[int, ...]) -> int: return 0 if any(h < 0 for h in heights): raise ValueError("No height can be negative") - length = len(heights) - - left_max = [0] * length - left_max[0] = heights[0] - for i, height in enumerate(heights[1:], start=1): - left_max[i] = max(height, left_max[i - 1]) - - right_max = [0] * length - right_max[-1] = heights[-1] - for i in range(length - 2, -1, -1): - right_max[i] = max(heights[i], right_max[i + 1]) - - return sum( - min(left, right) - height - for left, right, height in zip(left_max, right_max, heights) - ) - + left,right=0,len(heights)-1 + leftmax,rightmax=0,0 + water=0 + while left = leftmax: + leftmax=heights[left] + else: + water+=leftmax - heights[left] + left+=1 + else: + if heights[right] >= rightmax: + rightmax=heights[right] + else: + water+=rightmax - heights[right] + right-=1 + return water if __name__ == "__main__": import doctest From 3ab07d15b67a56f5722a26a3e0e90140083e9901 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 28 Nov 2025 09:18:59 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dynamic_programming/trapped_water.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/dynamic_programming/trapped_water.py b/dynamic_programming/trapped_water.py index fb51621a5ac7..5d950efd7264 100644 --- a/dynamic_programming/trapped_water.py +++ b/dynamic_programming/trapped_water.py @@ -34,24 +34,25 @@ def trapped_rainwater(heights: tuple[int, ...]) -> int: return 0 if any(h < 0 for h in heights): raise ValueError("No height can be negative") - left,right=0,len(heights)-1 - leftmax,rightmax=0,0 - water=0 - while left = leftmax: - leftmax=heights[left] + leftmax = heights[left] else: - water+=leftmax - heights[left] - left+=1 + water += leftmax - heights[left] + left += 1 else: if heights[right] >= rightmax: - rightmax=heights[right] + rightmax = heights[right] else: - water+=rightmax - heights[right] - right-=1 + water += rightmax - heights[right] + right -= 1 return water + if __name__ == "__main__": import doctest