数组的最长递减子序列

求一个数组的最长递减子序列

如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}

思路:动态规划

构建与原数组同等容量的辅助数组dp,记录以每个元素结束的最大序列的长度,如dp0=1,如果dpi<dpi-1,则dpi=dpi-1+1,否则dpi=1;循环可求出dp数组。最终根据求出的dp数组最大值以及该值的索引按需截取子串即可!
最长递增子序列反推即可!

javascript 复制代码
line = '9 5 4 3 2 5 4 3 1';
line = line.split(' ');
let n = line.length;
let res = [];
let dp = [];
dp[0] = 1;
//构造动态数组记录截止每个元素时的递减长度
for (let i = 1; i < n; i++) {
    if (line[i] < line[i - 1]) {
        dp[i] = dp[i - 1] + 1;
    } else {
        dp[i] = 1;
    }
}
//console.log('dp', dp);
let max = dp[0];//
let tag = 0;
//找出截止该元素最长递减子列表长度及及其所在位置索引
for (let i = 1; i < n; i++) {
    if (max <= dp[i]) {
        max = Math.max(max, dp[i]);
        //找出最长递减子列表长度的结束位置
        tag = i;
    }
}
//console.log('max', max);
//用substr截取即可,tag+1是为了防止出现-1
res = line.join('').substr(tag + 1 - max, max);
// res=line.slice(tag-max,tag);
//console.log('tag', tag);
console.log('res', res);
相关推荐
铅笔小新z几秒前
【数据结构】栈和队列
数据结构
江畔柳前堤2 分钟前
具身智能全景深度指南(2026年9月版):从“会聊天的AI“到“能干活的机器“
大数据·javascript·图像处理·人工智能·分布式·智慧城市·原型模式
liuyicenysabel10 分钟前
Grafana + Prometheus 分级告警配置设计(P0/P1/P2)
javascript·grafana·prometheus
张宇Joaquin23 分钟前
鲲鹏统一并行加速库KUPL--异步数据拷贝
线性代数·算法·矩阵·numpy
GlobalInfo25 分钟前
创新不是追逐热点,是在变化中建立长期竞争力
大数据·算法
Cry丶27 分钟前
Vue 3 业务管理页面实战:组件拆分、父子通信与弹窗复用
前端·javascript·vue.js·父子通信·组件拆分·弹窗复用
lvwangshu31 分钟前
线性代数基础 Linear Algebra Basics
数学·算法
雪芽蓝域zzs37 分钟前
Vue前端配置路由通配捕获 404
前端·javascript·vue.js
ZhouDevin1 小时前
算法论文/数据集5——AlignPrune(CVPR2026)基于样本损失时间序列精确识别噪声样本
算法
小凯在掘金1 小时前
类型判断什么时候用 typeof?
javascript