题目描述现在有一条笔直的水槽,里面有N块挡板。你需要从中选取两块挡板,使得能够获取最多的水容量。
输入
测试数据由多组输入样例组成
第一行输入一个整数N,( 2 <= N <= 20000 )
第二行输入N个整数 ni ( 0 <= ni <= 10000),分别代表挡板的高度
输出输出能够获取的最多水容量样例输入 Copy9
1 8 6 2 5 4 8 3 7
样例输出 Copy49
提示题目给出的样例详细可以见图
思路:双指针算法
使用变量存储最大面积,移动指针
1.错误代码
#include<bits/stdc++.h>
using namespace std;
int h[11000];
int max(int a,int b){
if(a>b) return a;
return b;
}
int main(){
int n,are;
while(cin>>n){
are=0;
for(int i=0;i<n;i++){
cin>>h[i];
}
int l=0,r=n-1;
while(l<r){
if(h[l]>h[r]){
are=max(are,(r-l)*h[r]);
r--;
}
else{
are=max(are,(r-l)*h[l]);
l++;
}
}
cout<<are<<endl;
}
return 0;
}
错误:数组超限,max函数不用定义,可直接使用
2.正确代码
#include<bits/stdc++.h>
using namespace std;
int h[110000];
int main(){
int n,are;
while(cin>>n){
are=0;
for(int i=0;i<n;i++){
cin>>h[i];
}
int l=0,r=n-1;
while(l<r){
if(h[l]>h[r]){
are=max(are,(r-l)*h[r]);
r--;
}
else{
are=max(are,(r-l)*h[l]);
l++;
}
}
cout<<are<<endl;
}
return 0;
}