数组最长平台的实现

这篇博客探讨了如何找出已排序数组中长度最长的平台,即连续相同元素的序列。作者对比了两种方法:一种是递归实现,时间复杂度为O(n),另一种是简单的循环实现,同样具有线性时间复杂度。尽管递归方法被老师推崇,但作者表示自己更易理解循环实现的逻辑。最后,作者给出了两种方法的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组最长平台
    已知一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串值相同的元素,并且这一串元素不能再延伸,例如,在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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值