最长平台问题

1、题目
最长平台指的是在一串排列有序的数字中,找出最长的重复数字;例如有一数组为:[1,2,3,3,4,4,4,4,4,5,6,6,6],则最长平台是4,长度为5.
2、在寻找最长平台中的要求
1)使用尽量少的变量;
2)对数组的元素仅遍历一次;
3)使用代码语句越少越好。
3、方法
已经有人提出非常好的解决方法,他的思路:在最长平台中,首位的数字肯定是相同的,使用一个变量记录目前遍历到的最长平台的长度length,如果存在另一个平台超过了之前寻找到的最长平台(长度为length),那么在当前找到的更长的平台上,首位长度肯定超过了length,即在该平台的第length+1位置(current_index),肯定满足array[current_index] == array[current_index - length - 1] 必然成立,并且length的长度得到了更新(因为超过了以前寻找到的“最长”平台)。代码如下:

public int long_plateau(int[] array){
	if(array == null)
		return -1;
	int length = 1;
	int current_index;
	for(current_index = 1;current_index < array.length;current_index++){
		if(array[current_index] == array[current_index - length])
			length++;
	}
	return length;
}

var code = “a8251c34-9858-438a-b2e2-a799a982d986”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值