《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(32)万剑归宗破妖阵 - 最长递增子序列(LIS)

embedded/2025/3/16 7:25:48/

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(32)万剑归宗破妖阵 - 最长递增子序列(LIS)

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的万剑谷,谷中有一座巨大的万剑归宗剑阵,剑阵闪烁着神秘的光芒。谷口有一块巨大的石碑,上面刻着一行文字:“欲破此阵,需以万剑归宗之力,破妖阵,最长递增子序列显真身。”

哪吒定睛一看,石碑上还有一行小字:“数组[10, 9, 2, 5, 3, 7, 101, 18]的最长递增子序列为[2, 5, 7, 101],长度为4。”哪吒心中一动,他知道这是一道关于寻找最长递增子序列(LIS)的难题,需要通过动态规划或二分优化的方法,找到数组中最长的递增子序列。

暴力解法:万剑归宗的初次尝试

哪吒心想:“要寻找最长递增子序列,我可以逐个元素比较。”他催动万剑归宗之力,从数组的第一个元素开始,逐个元素比较,试图找到最长的递增子序列。

int lengthOfLIS(vector<int>& nums) {int n = nums.size();vector<int> dp(n, 1); // dp[i]表示以nums[i]结尾的最长递增子序列的长度for (int i = 0; i < n; ++i) {for (int j = 0; j < i; ++j) {if (nums[i] > nums[j]) {dp[i] = max(dp[i], dp[j] + 1);}}}return *max_element(dp.begin(), dp.end());
}

哪吒成功地找到了最长递增子序列,但万剑归宗的光芒却黯淡了下来。他意识到,这种方法虽然可行,但效率低下,尤其是当数组很大时,灵力消耗巨大。

C++语法点

在C++中,动态规划是解决最长递增子序列问题的常用方法。以下是一些重要特性:

  • 动态规划

    • 动态规划通过将问题分解为子问题,并存储子问题的解来避免重复计算。
    • 常用操作:
      • 使用vector动态数组存储子问题的解。
      • 通过状态转移方程计算当前问题的解。
  • 数组操作

    • 使用vector<int>表示动态数组。
    • 常用方法:
      • vector<int> dp(n, 1):创建一个大小为n的动态数组,并初始化所有元素为1。
      • max_element(dp.begin(), dp.end()):找到数组中的最大值。

高阶优化:二分优化的智慧

哪吒元神中突然浮现金色铭文——「万剑归宗,二分优化显真身」。他意识到,可以通过二分优化的方法,将时间复杂度降低到O(n log n)。

哪吒决定使用二分优化,维护一个数组tails,其中tails[i]表示长度为i+1的递增子序列的最小末尾元素。通过这种方式,他成功地找到了最长递增子序列,而且灵力消耗大幅减少。

int lengthOfLIS(vector<int>& nums) {vector<int> tails;for (int num : nums) 

http://www.ppmy.cn/embedded/173003.html

相关文章

VS2019下载链接

Visual Studio 2019 Community 版&#xff08;免费版&#xff09;&#xff1a; https://aka.ms/vs/16/release/vs_community.exe Visual Studio 2019 Professional 版&#xff1a; https://aka.ms/vs/16/release/vs_professional.exe &#xff08;使用该版本需要有效的许可证。…

Ant Design Vue UI框架快速打造后台管理管理案例

1、安装vue类声明 npm install types/vue2、安装脚手架工具 $ npm install -g vue/cli3、安装使用组件 # 安装 $ npm i --save ant-design-vue4.x4、全局注册&#xff0c;修改main.ts&#xff0c;注意和app.vue路径 import { createApp } from vue; import Antd from ant-de…

《GitHub网路访问不稳定:解决办法》:此文为AI自动生成

《GitHub网路访问不稳定&#xff1a;解决办法》&#xff1a;此文为AI自动生成 GitHub 网路访问不稳定初现 在当今数字化时代&#xff0c;软件开发行业蓬勃发展&#xff0c;GitHub 作为全球最大的代码托管平台&#xff0c;已然成为无数开发者不可或缺的 “宝库”。它不仅汇聚了…

DeepSeek Kimi详细生成PPT的步骤

以下是使用 DeepSeek 和 Kimi 协作生成 PPT 的详细步骤&#xff0c;结合了两者的优势实现高效创作&#xff1a; 第一步&#xff1a;使用 DeepSeek 生成 PPT 大纲或内容 明确需求并输入提示词 在 DeepSeek 的对话界面中&#xff0c;输入具体指令&#xff0c;要求生成 PPT 大纲或…

2025可视掏耳勺VS棉签:哪个挖耳朵更安全高效?

传统棉签虽然方便&#xff0c;但实际上并不适合深入清理耳道。棉签在使用时容易将耳垢推向更深处&#xff0c;长期下来可能导致耳垢堆积&#xff0c;甚至引发堵塞。此外&#xff0c;盲目探入耳道还有可能划伤耳壁&#xff0c;增加感染风险。因此&#xff0c;越来越多的人开始寻…

谷歌Chrome或微软Edge浏览器修改网页任意内容

在谷歌或微软浏览器按F12&#xff0c;打开开发者工具&#xff0c;切换到console选项卡&#xff1a; 在下面的输入行输入下面的命令回车&#xff1a; document.body.contentEditable"true"效果如下&#xff1a;

Microsoft Excel 2024 LTSC mac v16.95 表格处理软件 支持M、Intel芯片

应用介绍 Microsoft Excel 2024 LTSC for Mac 是微软为需要长期稳定性和长期支持的企业用户、教育机构及其他专业用户提供的版本。与 Microsoft 365 或 Office 365 订阅版不同&#xff0c;Excel 2024 LTSC 版不提供频繁的功能更新&#xff0c;只会进行安全和性能优化修复&…

C++数据结构1——栈结构详解

一、栈的基本概念与特性 1. 栈的定义与特点 栈&#xff08;Stack&#xff09;是一种遵循后进先出&#xff08;LIFO, Last In First Out&#xff09;原则的线性数据结构&#xff0c;其核心特征包括&#xff1a; 单端操作&#xff1a;所有操作仅通过栈顶进行 动态存储&#xf…