C++最多水容量
2020-03-08 13:22
821 查看
现在有一条笔直的水槽,里面有N块挡板。你需要从中选取两块挡板,使得能够获取最多的水容量。
输入
测试数据由多组输入样例组成
第一行输入一个整数N,( 2 <= N <= 20000 )
第二行输入N个整数 ni ( 0 <= ni <= 10000),分别代表挡板的高度
输出
输出能够获取的最多水容量
样例输入 Copy
9
1 8 6 2 5 4 8 3 7
样例输出 Copy
49
方法一:暴力法
在这种情况下,我们将简单地考虑每对可能出现的线段组合并找出
这些情况之下的最大面积。 (我一开始就是这么想的)
方法二:双指针法
这种方法背后的思路在于,两线段之间形成的区域总是会受到其中
较短那条长度的限制。此外,两线段距离越远,得到的面积就越
大。
我们在由线段长度构成的数组中使用两个指针,一个放在开始,一
个置于末尾。 此外,我们会使用变量 maxarea 来持续存储到目前
为止所获得的最大面积。 在每一步中,我们会找出指针所指向的两
条线段形成的区域,更新 maxarea,并将指向较短线段的指针向较
长线段那端移动一步。
#include<bits/stdc++.h> using namespace std; int a[20005]; int main(){ int n; while(~scanf("%d",&n)){ int _max=0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); int l=1,r=n;//初始化坐标,一个在头一个在尾 while(l<r){ int min=a[l]<a[r]?a[l]:a[r]; int tem=min*(r-l); _max=max(_max,tem);//计算每次的最大值 if(a[l]<a[r])l++; else r--;//短的向长的靠近 } cout<<_max<<endl; } return 0; }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- CCF-201312-1-出现次数最多的数(C++)
- 盛最多水的容器C++
- Leetcode刷题37-11.盛最多水的容器(C++)
- c++实现“统计输入的string中重复次数最多的string”
- 3740(c++)众数是指在一组数据中,出现次数最多的数。例如:1, 1, 3 中出现次数最多的数为 1,则众数为 1。 给定一组数,你能求出众数吗?
- 使用C++设计一个类,该类最多能被实例化3次且不能被继承
- C++中的单子(最多只能有一个对象)
- 网易笔试编程题:最多可放蛋糕数(C++)
- 走台阶(每次最多迈k级)C++
- c++积累(4):vector对象初始化和大小、容量
- (蓝桥杯)算法训练ALGO-90—— 出现次数最多的整数 C++
- C++ 实现从0~100中随机生成50个数,统计出现的数字最大值和最小值,输出出现最多的次数及对应的数字
- C++中的单子(最多只能有一个对象)
- 新问题:一个进程最多可以接收多少个socket连接? - C/C++ - ChinaUnix.net -
- C++ 获得本地磁盘盘符的容量信息
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
- C++ 获得本地磁盘盘符的容量信息
- windows 2000下最多可以承受有多大容量外存????
- c++求一组数据中出现次数最多的数《c++程序设计原理与实践》第4章习题16
- C++字符串的大小和容量