学号 202314160221 石*新
这是很经典的一道算法面试题,知识点为双指针算法
解题步骤
-
将数组输入
-
定义两个指针,第一个指针j指向第一个height[1] 第二个指针i指向height[n];
-
开始操作,如果height[j+1]>height[j] j++
-
如果height[i-1]>height[i] i--
-
同时定义一个变量用来存储最大值 maxv= max(maxv,min(height[i],height[j]*(i-j)
下面见代码
#include<iostream>
using namespace std;
const int N=1e4;
int height[N];
int main()
{
int n;
cin >> n;
for(int i=1;i<=n;i++) cin >> height[i];
int i=n;
int j=1;
int maxv=-1;
while(j<i)
{
if(height[i-1]>height[i]) i--;
else
if(height[j+1]>height[j]) j++;
else
break;
maxv=max(maxv,min(height[i],height[j])*(i-j));
}
cout << maxv;
}
见执行结果