洛谷P1420最长连号两种题解对比

P1420 最长连号

题目描述

输入 n 个正整数,要求输出最长的连号的长度。

连号指从小到大连续自然数。

输入格式

第一行,一个整数 n。

第二行,n 个整数 ai​,之间用空格隔开。

输出格式

一个数,最长连号的个数。

输入输出样例

输入 #1

10
3 5 6 2 3 4 5 6 8 9

输出 #1

5

说明/提示

数据规模与约定

对于 100%的数据,保证 1<=n<=10^4 ,1<=ai<=10^9。

题解一:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int m,length(1),j(0),b[210];
    cin>>m;
	int a[m];
	for(int i=0;i<m;i++)
	{
	cin>>a[i];             //将数据输入到一个数组中
	}
	for(int i=1;i<m;i++)
  {
	 if(a[i]-a[i-1]==1)
	 {
	 length++;                //连号长度
     }
	 if(a[i]-a[i-1]!=1||i+1==m)
	 {
	 b[j]=length;
	 length=1;             //清空length,重新记
	 j++;	
	 }
  }
    sort(b,b+j);         //快排
	cout<<b[j-1];       //输出最大长度
	return 0;
}

 开辟了两个数组,使用了两次for循环,用了一次快排函数,还须考虑到如果最后两个数差也是1,无法存入b[j]数组,所以附加了条件i+1==m,题解较繁琐。

题解二:

#include<iostream>
using namespace std;
int Num,front,i,next,length=1,max;
int main()
{
    cin>>Num>>front;
    for(i=2;i<=Num;i++)
    {
	    cin>>next;
        if(next-front==1)
		length++;         //连号长度累加
        else 
		length=1;         //清空连号长度
        if(length>max)
        {
		max=length;     //存最大值
        }
        front=next;      //交换,被减数作为新的减数
    }
	   cout<<max;
       return 0;
}

使用了一次for循环,用了两个变量做差,交换,没有使用数组,用max始终存储最大值,不需要排序,强于题解一。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_坐看云起时_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值