leetcode:11. 盛最多水的容器(双指针)
程序员文章站
2022-05-06 21:35:18
...
题目:
分析:
从第一个开始,正着找上升子序列,从最后一个开始,倒着找上升子序列。
代码:
int main()
{
vector<int> h;
vector<int> v1;//正着上升的坐标
vector<int> v2;//倒着上升的坐标
//v1
v1.push_back(h[0]);
int c1=h[0];
for(int i=1;i<h.size()-1;i++)
{
if(h[i]<=c1) continue;
v1.push_back(h[i]);
c1=h[i];
}
//v2
v2.push_back(h[h.size()-1]);
int c2=h[h.size()-1];
for(int i=h.size()-2;i>0;i--)
{
if(h[i]<=c2) continue;
v2.push_back(h[i]);
c2=h[i];
}
for(int i=0;i<v1.size();i++)
{
cout<<v1[i]<<' ';
}
cout<<endl;
for(int i=0;i<v2.size();i++)
{
cout<<v2[i]<<' ';
}
cout<<endl;
int maxx=0;
for(int i=0;i<v1.size();i++)
{
for(int j=0;j<v2.size();j++)
{
if(v1[i]>=v2[j]) break;
cout<<h[v1[i]]<<" "<< h[v2[j]]<<endl;
maxx=max(maxx,(v2[j]-v1[i])*min(h[v1[i]],h[v2[j]]));
}
}
return maxx;
}
结果:
上一篇: 466.统计重复个数
下一篇: 二叉树——根据先序(后序)和中序遍历建树