Leetcode Container With Most Water
来源:互联网 发布:将神 鬼神吕布数据 编辑:程序博客网 时间:2024/06/08 00:34
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 linei 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.
Idea:
Simplest way is enumerating all possible combination. Time complexity is O(N^2), which is too large.
Another solution is two pointer. First make two pointer left and right point to 0 and len-1 of the array.
Compare height[left] and height(right), If height[left] > height(right), we know height[right] is the bottleneck. Calculate (right-left)*height[right]. Now we are sure that for every rectangle ends in right = len-1, the area contained must be less than (right-left)*height[right], since that the width must be less than (right-left) while the height bottleneck cannot be larger that height[right].
If height[left] <= height(right), calculate (right-left)*height[left]. Now we are sure that for every rectangle starts in left=0, the area contained must be less than (right-left)*height[left], since that the width must be less than right-left while height bottleneck cannot be larger than height[left].
Next narrow down the target rectangle width. We narrow down in the bottleneck position. That is, if height[left] > height(right), right--, otherwise left++.
When left and right meets we can stop, and the current max rectangle is the result we want.
code:
public class Solution { public int maxArea(int[] height) { int left = 0; int right = height.length-1; int max = 0; while(left<right){ if(height[left]<height[right]){ max = Math.max(max, (right-left)*height[left]); left++; }else{ max = Math.max(max, (right-left)*height[right]); right--; } } return max; }}
time complexity is O(n), space complexity is constant. But this code cannot pass leetcode large test case. Rewrite in C++ it passes
class Solution {public: int maxArea(vector<int>& height) { int left = 0; int right = height.size()-1; int res = 0; while(left<right){ if(height[left]>height[right]){ res = max(res, (right-left)*height[right]); right--; }else{ res = max(res, (right-left)*height[left]); left++; } } return res; }};
- LeetCode: Container With Most Water
- [LeetCode]Container With Most Water
- LeetCode Container With Most Water
- LeetCode: Container With Most Water
- [Leetcode] Container With Most Water
- Leetcode: Container With Most Water
- [LeetCode] Container With Most Water
- LeetCode Container With Most Water
- [Leetcode] Container With Most Water
- [LeetCode]Container With Most Water
- LeetCode-Container With Most Water
- Container With Most Water leetcode
- LeetCode - Container With Most Water
- LeetCode: Container With Most Water
- Leetcode: Container With Most Water
- 【LeetCode】Container With Most Water
- Leetcode: Container With Most Water
- LeetCode:Container With Most Water
- *LeetCode-Number of Digit One
- Note:except和except for的区别
- 在线升级FlashPlayer和GoogleChrome的bash脚本
- *LeetCode-House Robber II
- 2.5 Sum List
- Leetcode Container With Most Water
- 利用命令提示符转换硬盘模式
- MAC 配置 java 环境变量
- Android 实现调整屏幕亮度,以及自动适应
- c中文件的操作大全,可以了解向文件读取一个结构体
- 2.6 Palindrome
- 使用ANT打包Android应用
- SVN:冲突解决 合并别人的修改zz
- kX3552 + HiFi级播放器 + wifi无线保真= 实战HiFi音乐娱乐欣赏