洛谷 P1567 统计天数

题目描述

炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。

经历千辛万苦,他收集了连续 N(≤106)的最高气温数据。

现在,他想知道最高气温一直上升的最长连续天数。

输入输出格式

输入格式:
第 1 行:一个整数 N. 1≤N≤106
第 2 行:N个空格隔开的整数,表示连续 N 天的最高气温。 0≤ 最高气温 ≤109

输出格式:
1 行:一个整数,表示最高气温一直上升的最长连续天数。

输入输出样例

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

解法一

不用数组存,利用暂存量,因为本题只需比较前后两个数据,一次比较后把拿一个变量留出来存放新的值,即可再次比较。

#include
using namespace std;

int main(){
    int n,tem1=0,tem2=0,a=0,b=0,k;//分别是N,温度1,温度2,以及统计天数用的两个参量 
    scanf("%d",&n);
    
    for(k=0;k<n;k++){
        scanf("%d",&tem2);
        if(tem2>tem1) a+=1;//若第二天温度大于前一天的,天数加一 
        else{
            b=(a>b)?a:b;//令b等于a,b中较大值 
            a=0;//清空计数器 
        }
        tem1=tem2;//对于第三天来说,第三天的温度是tem2,第二天的温度是tem1 
    }
    printf("%d",b+1);
    return 0;
}

解法二

遇到下降就与已有的连续天数比较,大于则更新最大值。
设置墙预防全上升序列。

#include 
using namespace std;

long long a[10000002];
int main(){
    int n,sum=1,ans=0,i;//天数,计数器,存最大天数
    scanf("%d",&n);
    
    a[n+1]=-1;//设置一堵墙,预防全上升序列
    for(i=1;i<=n;i++)  scanf("%d",&a[i]);
    for(i=2;i<=n+1;i++){
        if(a[i]<a[i-1]){//遇到下降
            ans=max(sum,ans);//将计数器最大值更新存起来
            sum=1;//重置计数器
        }
        else sum++;//上升,天数加1;
    }

    printf("%d",ans);
    return 0;
}

你可能感兴趣的:(练习)