-
問題描述
-
我的實現(xiàn)
我的想法是:不斷比較當前平臺與之前所有平臺中的最長平臺契耿,若出現(xiàn)新的最長平臺瞒大,即替換原來的最長平臺(相應(yīng)的標記,即最長平臺的首元素地址搪桂,長度)透敌。
#include<iostream>
using namespace std;
#define MAXSIZE 1000
int main()
{
int i=0, N=0, Elem[MAXSIZE];
cout << "輸入數(shù)組元素(回車結(jié)束):";
while (cin>>Elem[N]){
N++;
if (cin.get() == '\n')
break;
}
int pS = 0, nS = 0, pLen = 1; /* pS標記之前平臺中最長平臺的首元素位置
pLen標記之前平臺中最長平臺的長度,每個平臺長度至少為1踢械,pLen初始化為1
nS標記當前平臺的首元素位置 */
for (i = 1; i < N; i++) { //第二個元素開始向后掃描
if (Elem[i] == Elem[i - 1]) //相同元素屬于同一平臺
{
if (i-nS+1 > pLen) //(i-nS+1)為當前平臺的掃描出的長度
{
// 若當前平臺長度大于之前的最長平臺長度
pS = nS; // pS重新標記
pLen = i - nS + 1; // pLen變化
}
}
else // 元素變化酗电,進入下一平臺, nS重新標記
nS = i;
}
cout << "數(shù)組中的最長平臺為:";
for (i = pS; i < pS + pLen; i++)
cout << Elem[i] << ' ';
cout << endl;
return 0;
}
-
答案實現(xiàn)
答案巧妙地求解最大平臺的長度内列,五體投地撵术。
int long_plateau(int x[], int n)
{
int length = 1;
int i;
for (i = 1; i < n; i++)
{
if (x[i] == x[i - length])
length++;
}
return length;
}