LeetCode Problem #11 Container With Most Water
Thank you,
AhmedG.
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container and n is at least 2.
![]() |
The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49. |
Solution Number One O(n^2) Brute Force :
- Try all valid combinations
- outer loop start from i = 0 to length of array
- inner loop start from j = i+1 to length of array
- compare current area with new area and choose max.
- return max area.
Solution Number Two O(n) :
Linear Solution greedy algorithm:
- calculating area it is rectangle
- width = rightIndex - leftIndex
- height = min (height[rightIndex], height[leftIndex])
- select max area
- update leftIndex and rightIndex
- if height[rightIndex] > height[leftIndex] this means we should search for another left leftIndex++
- else we need to search for another right rightIndex--
- return max area
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public int maxArea(int[] height) { | |
int left = 0; | |
int right = height.length-1; | |
int area = 0; | |
while (left < right) { | |
area = Math.max(area, (right-left) * Math.min(height[right], height[left])); | |
if (height[right] > height[left]) { | |
left++; | |
}else { | |
right--; | |
} | |
} | |
return area; | |
} | |
} |
AhmedG.
Comments
Post a Comment