1.1 最长平台

# -*- 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++;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值