数组最长平台
已知一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串值相同的元素,并且这一串元素不能再延伸,例如,在1,2,2,3,3,3,4,5,5,6中,1,2.2,3.3.3,4,5.5,6都是平台。试编写一个程序,接收一个数组,把这个数组最长的平台找出来。其实题目很简单,对大多数人来说都不是问题,老师说普通的算法时间复杂度为O(n3),用递归的方法可以把算法复杂度减小到O(n),我也试着写了一下递归的算法,但实在不好下手。以下是网上看到的某为大神写的递归实现方法:
#include<iostream>
using namespace std;
struct data{
int long_length;
int last_length;
};
data longest_plateau(int n,int x[]){
int long_length=0;
int last_length=0;
data m;
if(n==1){
long_length=1;
last_length=1;
}
else{
if(x[n-1]==x[n-2]){
last_length=longest_plateau(n-1,x).last_length+1;
}
else{
last_length=1;
}
if(last_length>longest_plateau(n-1,x).long_length){
long_length=last_length;
}
else{
long_leng