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.
Source: https://leetcode.com/problems/container-with-most-water/
Programming Language: C#
Run Time Complexity: O(N)
Space Complexity: Constant space
Analysis:
In order to maximize the area we need to find out the farthest points with maximum possible.
Solution
public int MaxArea(IList<int> height) { // Input validation if ((height == null) || (height.Count <= 1)) return 0; // Track maxArea found so far int maxArea = Int32.MinValue; // Start index int low = 0; // End Index int high = height.Count - 1; // While low is less than high while (low < high) { // Area equal to difference of high and low and min of heigh at that index int area = (high - low) * Math.Min(height[low], height[high]); // If area is greater than maxArea update maxArea = Math.Max(area, maxArea); // in an attemt to maximize the area // increment the low if height at low is less than height at high if (height[low] < height[high]) low = low + 1; // else decrement high else high = high - 1; } return maxArea; }
No comments:
Post a Comment