网站建设报价清单网站怎么优化关键词
描述
输入长度为n的一个正整数序列,要求输出序列中最长连号的长度连号指在序列中,从小到大的连续自然数
输入描述
第一行,一个整数n。
第二行,n个整数ai,之间用空格隔开
输出描述
一个数,最长连号的个数
实际上可以利用动态规划:
#include <bits/stdc++.h>
using namespace std;
struct node{int num,sum;
}a[10010];
bool cmp(node a,node b){return a.sum<b.sum;
}
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i].num;a[i].sum=1;}for(int i=2;i<=n;i++){if(a[i].num==a[i-1].num+1){a[i].sum=a[i-1].sum+1;}}sort(a+1,a+n+1,cmp);cout<<a[n].sum;
}
但用双指针更加方便:
#include <bits/stdc++.h>
using namespace std;
int a[10010];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}int ans=0;int r=1,l=1;//注意从0开始还是1开始while(r<=n){//个人建议直接while循环嵌套,不用for if(a[r]!=a[r-1]+1){l=r;}int cnt=r-l+1;ans=max(ans,cnt);r++;}cout<<ans;return 0;
}