数组最长平台的实现

这篇博客探讨了如何找出已排序数组中长度最长的平台,即连续相同元素的序列。作者对比了两种方法:一种是递归实现,时间复杂度为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
在C#中找到数组最长的单词可以通过遍历数组并比较每个字符串的长度来实现。以下是一种实现方式: 1. 首先将数组按照字符串长度排序,这样可以确保最长的字符串位于数组的末尾或者根据需求进行进一步处理。 2. 使用一个变量记录当前最长字符串的长度,并保存对应的字符串。 以下是一个完整的C#代码示例,用于找到数组最长的单词: ```csharp using System; using System.Collections.Generic; class Program { static string FindLongestWord(List<string> words) { // 将单词按长度从长到短排序 words = words.OrderByDescending(w => w.Length).ToList(); // 返回第一个元素,即最长的单词 return words.Count > 0 ? words[0] : null; } static void Main(string[] args) { var words = new List<string> { "apple", "banana", "cherry", "date" }; string longestWord = FindLongestWord(words); Console.WriteLine($"最长的单词是: {longestWord}"); // 输出最长的单词 } } ``` 如果需要处理多个最长单词的情况(例如存在多个长度同的最长单词),可以稍作修改,将所有最长单词保存到一个列表中并返回。 此外,也可以通过遍历数组并动态比较字符串长度的方式实现: ```csharp static string FindLongestWordManually(List<string> words) { string longestWord = ""; foreach (var word in words) { if (word.Length > longestWord.Length) { longestWord = word; } } return longestWord; } ``` 上述方法在性能上与排序方法比可能更高效,因为它不需要对整个数组进行排序,而是直接通过单次遍历完成最长单词的查找。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值