双指针比大小C++

发布时间:2024年01月18日

Tomislav 最近发现自己的身材完全走样了,她走楼梯都变得很累。
一天早上她起来以后,她决定恢复姣好的身材。她最喜欢的运动是骑自行车,因此她决定在本地的小山上做一次旅行。
她骑自行车的路线可以描述为 n 个数字的数列,每个数字表示每一段路地海拔高度。
Tomislav 最感兴趣的是最长的高度一直上升的子序列,她称这一段路为爬坡,Tomislav 只想考虑这段爬坡的高度差(即开始和最后的数字的差距),而不是什么路程长度。
一段爬坡路被定义为长度至少为 2 的连续的非下降子数列。
例如,我们考虑如下路线数列 12 3 5 7 10 6 1 11,这里有两个爬坡,第一个爬坡(3 5 7 10)的高度差是 7,第二个爬坡的高度差是 10(1 11)。
帮助 Tomislav 计算高度差最大的爬坡的高度差。

输入格式
输入包含多组测试数据。
每组数据第一行包含整数 n。
第二行包含 n 个整数 p1,p2,…,pn,表示路线数列。

输出格式
每组数据输出一行结果,表示最大高度差。如果不存在爬坡,则输出 0。

数据范围
每个输入最多包含 100 组数据。
1≤N≤1000,
1≤pi≤1000

输入样例:
5
1 2 1 4 6
6
10 8 8 6 4 3

输出样例:
5
0

#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int a[N],n;
int main()
{
    while(cin>>n&&n!=-1)
    {
        int res=0;
        for(int i=0;i<n;i++) cin>>a[i];
        for(int i=0;i<n;)
        {
            int j=i+1;
            while(j<n&&a[j]>=a[j-1]) j++;
            res=max(res,a[j-1]-a[i]);
            i=j;
        }
        cout<<res<<endl;
    }
    return 0;
}
文章来源:https://blog.csdn.net/qq_46380990/article/details/135678514
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。