0
已解决
题目描述 Description
有一个没有排序的整数数组,我们需要找到在这个数组当中,最长连续递增序列的长度(不要求序列元素在原数组中连续)
输入描述 Input Description
第一行,一个正整数n,表示有多少数据
第二行,n个数,数字和数字之间用空格隔开
输出描述 Output Description
一个数,表示最长连续序列的长度
WA30求解
#include<iostream>
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
int n,a[10005],b[10005],cnt,ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
int x=a[2]-a[1];
for(int i=1;i<=n;i++){
if(a[i+1]-a[i]==x){
cnt++;
b[i]=cnt;
}
else{
x=a[i+1]-a[i];
cnt=1;
b[i]=cnt;
}
}
for(int i=1;i<=n;i++){
ans=max(ans,b[i]);
}
cout<<ans+1;
return 0;
}
汪恺恒在2021-02-04 20:47:04追加了内容
#include<iostream>
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
int n,a[10005],b[10005],cnt,ans,c[200005];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
int x=-1;
for(int i=1;i<n;i++){
c[a[i+1]-a[i]+100000]++;
}
for(int i=0;i<=200000;i++){
x=max(x,c[i]);
}
x-=100000;
for(int i=1;i<=n;i++){
if(a[i+1]-a[i]==x){
cnt++;
b[i]=cnt;
}
else{
x=a[i+1]-a[i];
cnt=1;
b[i]=cnt;
}
}
for(int i=1;i<=n;i++){
ans=max(ans,b[i]);
}
cout<<ans+1;
return 0;
}
WA30