diff options
author | Jack Sangdahl <[email protected]> | 2025-10-03 21:55:54 -0600 |
---|---|---|
committer | Jack Sangdahl <[email protected]> | 2025-10-03 21:55:54 -0600 |
commit | badbb55eba0ccf863d56ded03317f945f250850a (patch) | |
tree | 903d67e7a4eb9c9c3fd1a346af89f47b9a28dbdf | |
parent | 2480c593f614b6a93882311ddfb9bdc885f40c98 (diff) | |
download | leetcode-badbb55eba0ccf863d56ded03317f945f250850a.tar.gz leetcode-badbb55eba0ccf863d56ded03317f945f250850a.zip |
11. container with most water
-rw-r--r-- | container_most_water.c | 29 | ||||
-rw-r--r-- | container_most_water.py | 32 |
2 files changed, 61 insertions, 0 deletions
diff --git a/container_most_water.c b/container_most_water.c new file mode 100644 index 0000000..9193654 --- /dev/null +++ b/container_most_water.c @@ -0,0 +1,29 @@ +// 11. Container With Most Water +#include "leetcode.h" + +/* + * you are given an integer array 'height' of length 'n'. there are 'n' vertical + * lines drawn such that two endpoints of the i'th line are '(i, 0)' and '(i, + * height[i])'. find two lines that together with the x-axis form a container + * such that the container contains the most water. return the maximum amount of + * water a container can store. notice that you may not slant the container. + */ + +int maxArea(int *height, int heightSize) { + int left = 0, right = heightSize - 1, ans = 0; + while (left < right) { + int curr = fmin(height[left], height[right]) * (right - left); + ans = fmax(ans, curr); + if (height[left] < height[right]) + left++; + else + right--; + } + return ans; +} + +int main() { + int h1[] = {1, 8, 6, 2, 5, 4, 8, 3, 7}, h2[] = {1, 1}; + printf("%d\n", maxArea(h1, ARRAY_SIZE(h1))); // expect: 49 + printf("%d\n", maxArea(h2, ARRAY_SIZE(h2))); // expect: 1 +} diff --git a/container_most_water.py b/container_most_water.py new file mode 100644 index 0000000..a028e5f --- /dev/null +++ b/container_most_water.py @@ -0,0 +1,32 @@ +# 11. Container With Most Water + +""" +you are given an integer array 'height' of length 'n'. there are 'n' vertical +lines drawn such that two endpoints of the i'th line are '(i, 0)' and '(i, +height[i])'. find two lines that together with the x-axis form a container +such that the container contains the most water. return the maximum amount of +water a container can store. notice that you may not slant the container. +""" + + +class Solution(object): + def maxArea(self, height): + """ + :type height: List[int] + :rtype: int + """ + left, right, ans = 0, len(height) - 1, 0 + while left < right: + curr = min(height[left], height[right]) * (right - left) + ans = max(ans, curr) + if height[left] < height[right]: + left += 1 + else: + right -= 1 + return ans + + +if __name__ == "__main__": + obj = Solution() + print(obj.maxArea(height=[1, 8, 6, 2, 5, 4, 8, 3, 7])) + print(obj.maxArea(height=[1, 1])) |