leetcode 11.Container With Most Water
2016-09-24 18:51
387 查看
题意:给出1-n每个下标线的高度,问使用哪两条线和x轴做容器能放最多的水。
一种方法遍历高度,先从大到小排序高度,然后取出前两个放在x轴上,坐标为l和r,然后依次遍历剩下的线,因为高度一直减小,所以要求后面遍历的线使得r-l变大即可。
struct node
{
int x,height;
}nt;
bool cmp(node a,node b)
{
return a.height>b.height;
}
int maxArea(vector<int>& height)
{
vector<node> mt;
int len=height.size();
if(len<=1)
{
return 0;
}
for(int i=0;i<len;i++)
{
nt.x=i;
nt.height=height[i];
mt.push_back(nt);
}
sort(mt.begin(),mt.end(),cmp);
int l=min(mt[0].x,mt[1].x),r=max(mt[0].x,mt[1].x),ans=(r-l)*min(mt[0].height,mt[1].height);
for(int i=2;i<len;i++)
{
if(mt[i].x<l)
{
l=mt[i].x;
}
if(mt[i].x>r)
{
r=mt[i].x;
}
ans=max(ans,mt[i].height*(r-l));
}
return ans;
}
第二种方法,遍历宽度,初始l和r指向坐标轴的两端,然后找出l和r中比较短的那一条,像中间靠拢,因为l和r计算面积时,依据的是较短的那一根,向中间靠拢,r-l变小,想要让面积变大,必然要求线的高度变高。
int maxArea(vector<int>& height)
{
int len=height.size();
int l=0,r=len-1,ans=0;
while(l<r)
{
ans=max(ans,(r-l)*min(height[l],height[r]));
if(height[l]<height[r])
{
l++;
}else
{
r--;
}
}
return ans;
}
一种方法遍历高度,先从大到小排序高度,然后取出前两个放在x轴上,坐标为l和r,然后依次遍历剩下的线,因为高度一直减小,所以要求后面遍历的线使得r-l变大即可。
struct node
{
int x,height;
}nt;
bool cmp(node a,node b)
{
return a.height>b.height;
}
int maxArea(vector<int>& height)
{
vector<node> mt;
int len=height.size();
if(len<=1)
{
return 0;
}
for(int i=0;i<len;i++)
{
nt.x=i;
nt.height=height[i];
mt.push_back(nt);
}
sort(mt.begin(),mt.end(),cmp);
int l=min(mt[0].x,mt[1].x),r=max(mt[0].x,mt[1].x),ans=(r-l)*min(mt[0].height,mt[1].height);
for(int i=2;i<len;i++)
{
if(mt[i].x<l)
{
l=mt[i].x;
}
if(mt[i].x>r)
{
r=mt[i].x;
}
ans=max(ans,mt[i].height*(r-l));
}
return ans;
}
第二种方法,遍历宽度,初始l和r指向坐标轴的两端,然后找出l和r中比较短的那一条,像中间靠拢,因为l和r计算面积时,依据的是较短的那一根,向中间靠拢,r-l变小,想要让面积变大,必然要求线的高度变高。
int maxArea(vector<int>& height)
{
int len=height.size();
int l=0,r=len-1,ans=0;
while(l<r)
{
ans=max(ans,(r-l)*min(height[l],height[r]));
if(height[l]<height[r])
{
l++;
}else
{
r--;
}
}
return ans;
}
相关文章推荐
- debug assertion failed line 40
- Robomongo连接MongoDB 3.0报 Authorization failed 解决办法
- LeetCode 11. Container With Most Water
- open failed: ENOENT (No such file or directory)
- Error:Failed to resolve: com.afollestad:material-dialogs:
- Conversion to Dalvik format failed: Unable to execute dex:错误的解决办法
- H - ZCC loves straight flush
- http://blog.csdn.net/wooshn/article/details/8069087/
- 引用冲突问题
- Medium 11题 Container With Most Water
- 游戏AI系列内容 咋样才能做个有意思的AI呢
- LeetCode 9 : Palindrome Number
- 无线WIFI入侵检测----WAIDPS
- responder chain
- http://blog.csdn.net/u013682388/article/details/39547773
- MT7621完美支持32M SPI Flash(W25Q256) 修复 soft reset fail
- waitpid介绍
- PAT 1079. Total Sales of Supply Chain (25)(bfs,树,树的层数)
- PAT(A) - 1086. Tree Traversals Again (25)
- 关于自定义indexbar使用paint画笔实时显示索引listview的header首字母和header对应的列表首个字符