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

数组的最长递减子序列

求一个数组的最长递减子序列
如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
思路:动态规划
构建与原数组同等容量的辅助数组dp,记录以每个元素结束的最大序列的长度,如dp[0]=1,如果dp[i]<dp[i-1],则dp[i]=dp[i-1]+1,否则dp[i]=1;循环可求出dp数组。最终根据求出的dp数组最大值以及该值的索引按需截取子串即可!
最长递增子序列反推即可!

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);

在这里插入图片描述


http://www.kler.cn/a/106682.html

相关文章:

  • 力扣hot100之螺旋矩阵
  • 20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识
  • 无人机(Unmanned Aerial Vehicle, UAV)路径规划介绍
  • Web前端------表单标签
  • NumPy;NumPy在数据分析中的应用;NumPy与其他库的搭配使用
  • Docker私有仓库管理工具Registry
  • Project Costs
  • 第四章 文件管理 十、文件系统的全局结构
  • 前端工程化面试题及答案【集合】
  • 网络通信 | 内网穿透
  • 机器视觉3D项目评估的基本要素及测量案例分析
  • Pandas数据导入和导出:CSV、Excel、MySQL、JSON
  • 大语言模型(LLM)综述(四):如何适应预训练后的大语言模型
  • QQ云端机器人登录系统php源码开心版
  • PHP:json_encode和json_decode用法
  • Python 中的内存泄漏问题
  • AD9371 官方例程HDL详解之JESD204B RX侧时钟生成
  • docker部署prometheus+grafana服务器监控(一)
  • 【Docker】Linux网桥连接多个命名空间
  • 3.线性神经网络
  • 7.MySQL复合查询
  • seacms_CNVD-2020-22721_v10.1漏洞分析与复现
  • [Java]前中后序遍历二叉树/递归与非递归
  • 结构体数组经典运用---选票系统
  • Mybatis中延迟加载~
  • MySQL基础入门教程(InsCode AI 创作助手)