1. 程式人生 > >最長相等子序列長度(順序表)

最長相等子序列長度(順序表)

1.題目:

 Problem Description

給定一個有n個元素的整數陣列b,b中連續的相等元素構成的子序列稱為平臺。設計一個演算法求b中最長平臺的長度。

 Input

第一行為一個數字m,表示下面有m組資料,每組資料包括2行;每組資料中的第一行表示陣列的長度n(不會超過20,但可為空表),第二行表示陣列的所有元素。

 Output

輸出最長平臺的長度。

 Sample Input

2
8
11 3 8 8 8 8 8 7
10
11 3 3 25 8 8 8 8 8 7

 Sample Output

5
5

2.參考程式碼:

#include <iostream>
using namespace std;

class LinkList{
private:
	int data[100],len;
public:
	LinkList(int* a,int n);
	void Delete();
};

LinkList::LinkList(int* a,int n){
	for(int i=0;i<n;i++)
		data[i]=a[i];
	len=n;
}

void LinkList::Delete(){   ///核心程式碼
	if(len==0)   ///別忘了空表的處理
	{
		cout<<0<<endl;
		return ;
	}
	int i,j,k,max=0;
	for(i=0;i<len;i++)
	{
		k=1;   ///初始化為一個
		for(j=i+1;j<len;j++)
		{
			if(data[i]!=data[j])   //不相等就結束
				break;
			k++;   ///計算連續相等的個數
		}
		if(max<k)   ///求出最長的平臺
			max=k;
	}
	cout<<max<<endl;
}

int main()
{
	int t,n,i,a[100];
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(i=0;i<n;i++)
			cin>>a[i];
		LinkList e(a,n);
		e.Delete();
	}
	return 0;
}