问题标题: 酷町堂:6164 最长的连续序列

0
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


0
已采纳
康曦
康曦
中级光能
中级光能

排序后a[2]-a[i-1]的差,不一定是最长连续等差子序列的公差

康曦在2021-02-04 20:20:49追加了内容

打错了,是a[2]-a[1]

0
周琪岳
周琪岳
资深光能
资深光能

仔细审题,题目没说要连续

 

0
周琪岳
周琪岳
资深光能
资深光能

你的头像好奇怪,我的头像又改回原来的了

0
0
我要回答