# -*- coding: cp936 -*-
'''
问题:已知一个已经从小到大排序好的数组,说这个数组中的一个平台,
就是连续的一串值相同的元素,并且这一串元素不能再延伸。
例如,在1,2,2,3,3,3,4,5,5,6中1,2.2,3.3.3,4,5.5,6都是平台。
3.3.3为最长平台
试编写一个程序,接收一个数组,把这个数组中的最长平台找出来。
感觉有点像求最长序列和
'''
def FindLongPingTai(listParam):
if len(listParam) == 0:
return -1
maxPingTaiValue=tempValue=listParam[0]
maxPingTaiLen=tempValueCount=0
for item in listParam:
if tempValue == item:
tempValueCount+=1
else:
if tempValueCount > maxPingTaiLen:
maxPingTaiLen=tempValueCount
maxPingTaiValue=tempValue
tempValue=item
tempValueCount=1
print "最大平台数为%d, 长度为%d" %(maxPingTaiValue, maxPingTaiLen)
FindLongPingTai( [1,2,2,3,3,3,4,5,5,6] )
另外附上David Greis先生的c++代码,的确很神奇,他用一个变量当成一个夹具尺,若已遍历的前面部分序列满足夹具尺的长度,则增加夹具尺长度在比较
int longest_plateau2(int x[], int n)
{
int length = 1;
int i;
for(i = 1;i < n; i++)
{
if(a[i]==a[i-length])
length++;
}
return length++;
}