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

经典算法 最长单调递增子序列

最长单调递增子序列

问题描述

找出由n个数组成的序列的最长单调递增子序列。

示例输入

9
2 1 5 3 6 4 8 9 7

示例输出

5

示例输入

6
5 6 7 1 2 8

示例输出

4

c++代码(动态规划 O(n^2))

#include<bits/stdc++.h>using namespace std;int main() {int n, ans = 0;cin >> n;vector<int> arr(n), dp(n, 1);for (int i = 0; i < n; i++) cin >> arr[i];for (int i = 0; i < n; i++) {for (int j = i - 1; j >= 0; j--) {if (arr[i] > arr[j]) dp[i] = max(dp[i], dp[j] + 1);}}for (int i = 0; i < n; i++) ans = max(ans, dp[i]);cout << ans;return 0;
}

c++代码(贪心+二分 O(nlogn))

#include <bits/stdc++.h>using namespace std;int main() {int n;cin >> n;vector<int> arr(n);for (int i = 0; i < n; i++) cin >> arr[i];vector<int> ans;for (int i = 0; i < n; i++) {if (ans.size() == 0 || arr[i] > ans.back()) ans.push_back(arr[i]);else {auto k = lower_bound(ans.begin(), ans.end(), arr[i]);*k = arr[i];}}cout << ans.size();return 0;
}//by wqs

算法解析

动态规划法解析

dp[i]表示以i结尾的最长单调递增子序列的长度,则遍历i之前的dp[j],如果arr[j] < arr[i],说明arr[i]可以拼接在dp[j]的后面。

所以dp[i] = dp[j] + 1,考虑到有很多j,取最大值,dp[i] = max(dp[i], dp[j] + 1);

贪心+二分算法解析

考虑到最长单调子序列的单调递增,二分查询很快,所以有了这个算法。

我们尽量让序列越长越好,序列里面的数越小越好,为什么呢

例如

7 1 8 2 9 3 10 5

8 9 10不可以选5

而1 2 3可以选5

前面的数越小,后面的数加进来的概率越大

下面给出过程

7

1,由于7 > 1,不如替换为1,让后面的数容易加入序列

1 8

1 2,由于8 > 2不如替换为2,让后面的数容易加入序列

1 2 9

1 2 3,由于9 > 3,不如替换为3,让后面的数容易加入序列

1 2 3 10

1 2 3 5,由于10 > 5,不如替换为5,让后面的数容易加入序列

每次我们要加入一个数的时候

如果可以直接加入序列末尾,就加入序列末尾,

否则我们二分查找第一个大于或者等于它的位置,将那个位置换成它。

这样操作,后面的数中选率大

相关文章:

  • 第十章:CrewAI - 面向流程的多 Agent 结构化协作
  • 【分享】音频音乐剪辑[特殊字符]人声分离伴奏提取[特殊字符]拼接合并
  • KUKA机器人快速启动设置
  • MCP 架构全解析:Host、Client 与 Server 的协同机制
  • CSRF(cross-site request forgery)跨域请求访问
  • Spark 配置 YARN 模式
  • Python数据容器:数据容器的分类、数据容器特点总结、各数据容器遍历的特点、数据容器通用操作(统计,转换,排序)
  • C++ 中自主内存管理 new/delete 与 malloc/free 完全详解
  • 如何搭建spark yarn 模式的集群集群
  • 贝叶斯优化RF预测模型
  • MYSQL三大日志、隔离级别(MVCC+锁机制实现)
  • 【深度学习与大模型基础】第14章-分类任务与经典分类算法
  • Vue2 相关知识点整理
  • 数据结构---单链表的增删查改
  • 第十六届蓝桥杯 2025 C/C++组 25之和
  • 【Bash】可以请您解释性地说明一下“2>1”这个语法吗?
  • 基于tabula对pdf中多个excel进行识别并转换成word中的优化(四)
  • 关于插值和拟合(数学建模实验课)
  • 【记】Laya2.x数字末尾导致换行异常问题
  • C# 14 field keyword:属性简化新利器
  • 上海74岁老人宜春旅游时救起落水儿童,“小孩在挣扎容不得多想”
  • 我国将开展市场准入壁垒清理整治行动
  • 费高云调研党的建设工作:营造风清气正劲足的政治生态
  • 外交部回应涉长江和记出售巴拿马运河港口交易:望有关各方审慎行事,充分沟通
  • 四川邻水县县长石国平拟任县(市、区)党委书记
  • 高璞任中国一汽党委常委、副总经理