问题 E: 最多水容量
作者:互联网
题目描述
现在有一条笔直的水槽,里面有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比较,较大则替换,然后将较短的指针向较长的指针那端移动。
AC代码:
#include <cstdio>
#include <iostream>
using namespace std;
int high[20005];
int max(int a, int b){
return a>b?a:b;
}
int main(){
int n,maxarea;
while(scanf("%d",&n)!=EOF){
maxarea=0;
for(int i=0;i<n;i++){
scanf("%d",&high[i]);
}
int i=0,j=n-1;
while(i<j){
if(high[i]>high[j]){
maxarea=max(maxarea,(j-i)*high[j]);
j--;
}else{
maxarea=max(maxarea,(j-i)*high[i]);
i++;
}
}
printf("%d\n",maxarea);
}
return 0;
}
GreatWzi
发布了4 篇原创文章 · 获赞 0 · 访问量 60
私信
关注
标签:high,容量,int,max,样例,问题,最多水,maxarea,指针 来源: https://blog.csdn.net/GreatWzi/article/details/104513072