当前位置: 首页 > news >正文

最长递增——蓝桥杯

1.题目描述

在数列 a1​,a2​,⋯,an​ 中,如果ai​<ai+1​<ai+2​<⋯<aj​,则称 ai​ 至 aj​ 为一段递增序列,长度为 j−i+1。

定一个数列,请问数列中最长的递增序列有多长。

输入描述

输入的第一行包含一个整数 n。

第二行包含 n 个整数 a1​,a2​,⋯,an​,相邻的整数间用空格分隔,表示给定的数列。

其中, 2≤n≤1000,0≤数列中的数≤104。

输出描述:

输出一行包含一个整数,表示答案。

输入输出样例

示例

输入

7
5 2 4 1 3 7 2

输出

3

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

2.代码

#include <iostream> // 引入输入输出流库
using namespace std; // 使用标准命名空间int main() // 主函数
{int n; // 定义一个整数n,用于存储数列的长度cin >> n; // 从标准输入读取n的值int a[n+2]; // 定义一个大小为n+2的整数数组a,用于存放数列(多开两个空间以防止越界)int len = 1, maxn = 1; // 定义两个整数len和maxn,分别用于记录当前递增序列的长度和最长递增序列的长度,初始值都设为1for (int i = 0; i < n; i++) // 循环读取n个整数并存入数组a中{cin >> a[i];}for (int i = 1; i < n; i++) // 从数组的第二个元素开始遍历{if (a[i] > a[i - 1]) // 如果当前元素大于前一个元素,说明递增序列还在继续{len++; // 递增序列长度加1if (i == n - 1 && maxn < len) // 如果当前元素是数组的最后一个元素,并且当前递增序列长度大于已知的最长递增序列长度{maxn = len; // 更新最长递增序列长度}}else // 如果当前元素不大于前一个元素,说明递增序列结束{if (maxn < len) // 如果当前递增序列长度大于已知的最长递增序列长度{maxn = len; // 更新最长递增序列长度}len = 1; // 重置当前递增序列长度为1}}cout << maxn << endl; // 输出最长递增序列的长度return 0; // 返回0,表示程序正常结束
}

3.解题想法

以上代码的思路主要是通过一次遍历来找出数列中的最长递增子序列的长度。具体来说,它使用了一个变量len来记录当前递增序列的长度,另一个变量maxn来记录最长递增序列的长度。遍历数列时,如果当前元素大于前一个元素,则len加1;否则,将len与maxn比较并更新maxn,然后将len重置为1。

优点:


1. 简单直观:代码逻辑清晰,容易理解和实现。

2. 时间复杂度低:只需遍历一次数列,时间复杂度为O(n),效率较高。

3. 空间复杂度低:只使用了常数级别的额外空间,空间复杂度为O(1)。

缺点:


1. 边界条件处理复杂:需要特别处理最后一个元素的递增序列情况,增加了代码的复杂性。

2. 不够灵活:如果需要处理更复杂的序列问题(如最长非递减子序列),需要对代码进行较大修改。

枚举法的改进:


如果你希望在找到一个递增序列后,能够从下一个元素开始继续查找,而不是从头开始,可以使用动态规划的方法来改进。具体来说,可以使用一个数组dp来记录以每个元素结尾的最长递增子序列的长度。

http://www.lryc.cn/news/526314.html

相关文章:

  • 【MFC】C++所有控件随窗口大小全自动等比例缩放源码(控件内字体、列宽等未调整) 20250124
  • C#标准Mes接口框架(持续更新)
  • 【Uniapp-Vue3】动态设置页面导航条的样式
  • SQL 递归 ---- WITH RECURSIVE 的用法
  • 期权帮|如何利用股指期货进行对冲套利?
  • INCOSE需求编写指南-第1部分:介绍
  • FFPlay命令全集合
  • Mono里运行C#脚本34—内部函数调用的过程
  • rust feature h和 workspace相关知识 (十一)
  • -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录
  • 【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
  • C#高级:常用的扩展方法大全
  • Consul持久化配置报错1067---consul_start
  • 「 机器人 」扑翼飞行器控制策略浅谈
  • Qt信号与槽底层实现原理
  • QT QTableWidget控件 全面详解
  • Flutter_学习记录_基本组件的使用记录
  • 基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
  • 计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
  • 亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘
  • Gin 应用并注册 pprof
  • Jenkins 启动
  • 第20篇:Python 开发进阶:使用Django进行Web开发详解
  • 文献引用指南ChatGPT提示词分享
  • 程序代码篇---C++类.c\.h
  • @RabbitListener处理重试机制完成后的异常捕获
  • Mac 上管理本地 Go 版本
  • 低代码系统-产品架构案例介绍、得帆云(八)
  • 免费GPU算力,不花钱部署DeepSeek-R1
  • JavaEE:多线程进阶