diff --git a/src/main/java/com/thealgorithms/misc/ContainerWithMostWater.java b/src/main/java/com/thealgorithms/misc/ContainerWithMostWater.java new file mode 100644 index 000000000000..c971eef51e25 --- /dev/null +++ b/src/main/java/com/thealgorithms/misc/ContainerWithMostWater.java @@ -0,0 +1,32 @@ +package com.thealgorithms.misc; + +/** + * Finds the maximum amount of water a container can store given an array of + * heights. Uses a two-pointer approach starting from both ends. + * + *
Example: height = [1,8,6,2,5,4,8,3,7] -> 49 + * + *
Time complexity: O(n), Space complexity: O(1) + * + * @see LeetCode #11 + */ +public final class ContainerWithMostWater { + private ContainerWithMostWater() { + } + + public static int maxArea(int[] height) { + int left = 0; + int right = height.length - 1; + int maxWater = 0; + while (left < right) { + int water = Math.min(height[left], height[right]) * (right - left); + maxWater = Math.max(maxWater, water); + if (height[left] < height[right]) { + left++; + } else { + right--; + } + } + return maxWater; + } +} diff --git a/src/test/java/com/thealgorithms/misc/ContainerWithMostWaterTest.java b/src/test/java/com/thealgorithms/misc/ContainerWithMostWaterTest.java new file mode 100644 index 000000000000..22d3737ad4e5 --- /dev/null +++ b/src/test/java/com/thealgorithms/misc/ContainerWithMostWaterTest.java @@ -0,0 +1,28 @@ +package com.thealgorithms.misc; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class ContainerWithMostWaterTest { + + @Test + public void testExample() { + assertEquals(49, ContainerWithMostWater.maxArea(new int[] {1, 8, 6, 2, 5, 4, 8, 3, 7})); + } + + @Test + public void testTwoElements() { + assertEquals(1, ContainerWithMostWater.maxArea(new int[] {1, 1})); + } + + @Test + public void testDescending() { + assertEquals(4, ContainerWithMostWater.maxArea(new int[] {4, 3, 2, 1})); + } + + @Test + public void testEqualHeights() { + assertEquals(8, ContainerWithMostWater.maxArea(new int[] {2, 2, 2, 2, 2})); + } +}