知识点:双指针算法
注意:边界值是否取等号,爬坡先平后升也算爬坡
#include<bits/stdc++.h>
using namespace std;
const int N = 1010; 最大长度为1010
int n,a[N];
int main()
{
while(cin>>n)
{
for(int i=0;i<n;i++) cin>>a[i]; // 读取n个整数,并存储到数组a中
int res = 0;
for(int i=1,j=0;i<n;i++) // 双指针,i用于遍历数组,j用于记录上一个递增子序列的最后一个元素的索引
{
if(a[i]>=a[i-1]) // 如果当前元素大于等于前一个元素,说明仍在同一个递增子序列中
{
res = max(res,a[i]-a[j]); // 更新最大差值
}
else // 如果当前元素小于前一个元素,说明进入了一个新的递增子序列
{
j=i; // 更新j为当前索引,作为新递增子序列的起始位置
}
}
cout<<res<<endl;
}
return 0;
}