題目:
[編程題]最長和諧連續子序列
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 256M,其他語言512M
和諧連續序列是指一個連續序列中元素的最大值和最小值之間的差值正好是1,
現在,給定一個整數陣列,你需要在所有可能的連續子序列中找到最長的和諧連續子序列的長度,
輸入描述:
一行整數陣列,由空格分割
輸出描述:
一行一個數字表示答案,即最長和諧連續子序列的長度
輸入例子1:
1 3 2 2 5 2 3 7
輸出例子1:
3
例子說明1:
最長的連續和諧子序列是:[3,2,2]
輸入例子2:
1 3 2 2 1 1 2 3
輸出例子2:
5
例子說明2:
最長的連續和諧子序列是:[2,2,1,1,2]
說明:
題目意思可以理解為,尋找一個序列,即僅包含某個元素和比他自身大一或僅包含某個元素和比他自身小一,且序列中至少兩個元素不同,使得這樣的序列最長,照題意模擬即可,
代碼:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+7;
int main(){
string s;
int a[maxn],t=0;
int kmax=0,sum=0;
getline(cin,s);
for(int i=0;i<s.length();i++){
if(s[i]==' '){
a[t++]=sum;
sum=0;
}else{
sum=sum*10+(s[i]-'0');
}
//處理輸入,可能會有多位數
}
a[t++]=sum;
for(int i=0;i<t;i++){
int k=0,flag=0; //標記用于表示序列中是否有不同元素,全是相同元素則結果應該為0
for(int j=i+1;j<t;j++){
if(a[j]!=a[i]&&a[j]!=a[i]+1){
break; //對僅包含自身和自身+1的序列進行掃描
}
if(a[j]!=a[i]){
flag=1;
}
k++;
}
if(!flag){
k=0;
}
if(kmax<k){
kmax=k;
}
k=0,flag=0;
for(int j=i+1;j<t;j++){
if(a[j]!=a[i]&&a[j]!=a[i]-1){
break; //對僅包含自身和自身-1的序列進行掃描
}
if(a[j]!=a[i]){
flag=1;
}
k++;
}
if(!flag){
k=0;
}
if(kmax<k){
kmax=k;
}
}
if(!kmax){
cout<<kmax<<endl;
}else{
cout<<kmax+1<<endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/248508.html
標籤:其他
上一篇:使用Java語言撰寫一個五子棋UI界面并實作網路對戰功能(非局域網)
下一篇:冒泡排序和插入排序傻傻分不清
