# 11. Container With Most Water

class Solution {
struct segTree{
int l,r;
int v;
segTree* left,*right;
segTree(int val):v(val),left(NULL),right(NULL){};
};
public:
void build(segTree* &root,vector<int> &nums,int l,int r)
{
if(r==l)
{
root=new segTree(l);
root->l=l;
root->r=r;
return;
}
int mid=(l+r)>>1;
root=new segTree(0);
build(root->left,nums,l,mid);
build(root->right,nums,mid+1,r);
if(nums[root->left->v]>nums[root->right->v])
root->v=root->left->v;
else
root->v=root->right->v;
root->l=l;
root->r=r;
}
int search(segTree* &root,vector<int>& nums,int l,int r)
{
if(root==NULL||root->l>r||root->r<l)
return -1;
if(root->l==l&&root->r==r)
return root->v;
int mid=(root->l+root->r)>>1;
if(r<=mid)
return search(root->left,nums,l,r);
if(l>=mid+1)
return search(root->right,nums,l,r);
int vl=search(root->left,nums,l,mid);
int vr=search(root->right,nums,mid+1,r);
if(nums[vl]>nums[vr])
return vl;
return vr;
}
int binarySearchR(segTree* &root,vector<int>& nums,int d,int l,int r)
{
int pos=l;
int ans=pos;
while(l<=r)
{
pos=search(root,nums,l,r);
if(nums[pos]>=d)
{
ans=pos;
}
else
return ans;
l=pos+1;
}
return ans;
}
int binarySearchL(segTree* &root,vector<int>& nums,int d,int l,int r)
{
int pos=r;
int ans=pos;
while(l<=r)
{
pos=search(root,nums,l,r);
if(nums[pos]>=d)
{
ans=pos;
}
else
return ans;
r=pos-1;
}
return ans;
}
int maxArea(vector<int>& height) {
int n=height.size();
int i,j;
int curArea,ans=0;
segTree* root;
build(root,height,0,n-1);

for(i=0;i<n;i++)
{
if(height[i]==0)
continue;
int l=binarySearchL(root,height,height[i],0,i);
int r=binarySearchR(root,height,height[i],i,n-1);
curArea=max((i-l),(r-i))*height[i];
ans=max(ans,curArea);
}
return ans;
}
};
/*
[1,2,1,5,6,8,9,22,1,,3,5,6,7,4,6,8,10,2,0,3,5,7,8,5,12,4,10]
*/

class Solution {
public:
int maxArea(vector<int>& height) {
int n=height.size();
int i,j;
int curArea,ans=0;
int left=0,right=n-1;
while(left<right)
{
curArea=min(height[right],height[left])*(right-left);
ans=max(curArea,ans);
if(height[left]>height[right])
right--;
else
left++;
}
return ans;
}
};

class Solution {
public:
struct Node{
int h;
int ind;;
};
static bool cmp(Node &a,Node &b)
{
return a.h>b.h;
}
int maxArea(vector<int>& height) {
int n=height.size();
int i,j;
int curArea,ans=0;
Node H[n];
for(i=0;i<n;i++)
{
H[i].h=height[i];
H[i].ind=i;
}
std::sort(H,H+n,cmp);
int Max=H[0].ind,Min=H[0].ind;
for(i=0;i<n;i++)
{
curArea=max((Max-H[i].ind),(H[i].ind-Min))*H[i].h;
ans=max(ans,curArea);
if(H[i].ind<Min)
Min=H[i].ind;
if(H[i].ind>Max)
Max=H[i].ind;
}
return ans;
}
};

• 本文已收录于以下专栏：

## LeetCode 11 Container With Most Water (C,C++,Java,Python)

Problem: Given n non-negative integers a1, a2, ..., an, where each represents a point at coor...
• runningtortoises
• 2015年05月07日 22:56
• 1112

## 【LEETCODE】11-Container With Most Water [Python]

Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai)...
• aliceyangxi1987
• 2016年01月07日 09:03
• 405

## 【LeetCode】Container With Most Water 解题报告

【题目】 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordina...
• ljiabin
• 2014年12月02日 09:24
• 11700

## LeetCode(11) ContainerWithMostWater

• feliciafay
• 2013年12月09日 08:23
• 3496

## LeetCode --- 11. Container With Most Water

• makuiyu
• 2015年01月29日 10:49
• 2249

## LEETCODE 11 Container With Most Water （JAVA题解）

https://leetcode.com/problems/container-with-most-water/ 原题链接。 题意解析： 给你一个顶点数组，例如{4,7,9}，这个定点数...
• CHAOLIN_IT
• 2016年02月01日 18:41
• 395

## 【LeetCode-面试算法经典-Java实现】【011-ContainerWithMostWater（容纳最多的水）】

【011-ContainerWithMostWater（容纳最多的水）】找两条竖线然后这两条线以及X轴构成的容器能容纳最多的水。使用贪心算法 　　1.首先假设我们找到能取最大容积的纵线为 i, j (...
• DERRANTCM
• 2015年07月19日 06:58
• 2683

## [LeetCode] 011. Container With Most Water (Medium) (C++/Java/Python)

[LeetCode] 011. Container With Most Water (Medium) (C++/Java/Python)
• hcbbt
• 2015年03月02日 22:51
• 1617

## Leetcode Container With Most Water 解题报告

• worldwindjp
• 2014年01月23日 10:22
• 3492

## 【LeetCode】【Python题解】Container with most water

• u011613729
• 2014年10月08日 21:30
• 3400

举报原因： 您举报文章：11. Container With Most Water 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)