欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode:11. 盛最多水的容器(双指针)

程序员文章站 2022-05-06 21:35:18
...

题目:

leetcode:11. 盛最多水的容器(双指针)

分析:

从第一个开始,正着找上升子序列,从最后一个开始,倒着找上升子序列。

代码:

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;
}

结果:

leetcode:11. 盛最多水的容器(双指针)

相关标签: 双指针