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

做平台网站怎么做佛山做网站制作

做平台网站怎么做,佛山做网站制作,山东seo第一,淘宝网 商务网站建设目的给定一个数组,求最长递增子序列的长度,就是要求我们求出一个序列中最长的上升子序列的长度,最长上升子序列的定义就是从原序列中按照孙旭去除一些数字,这些数字是逐渐增大的。 *定义dp[i]表示以第i个元素结尾的最长上升子序列的长度。 *初始…

给定一个数组,求最长递增子序列的长度,就是要求我们求出一个序列中最长的上升子序列的长度,最长上升子序列的定义就是从原序列中按照孙旭去除一些数字,这些数字是逐渐增大的。

*定义dp[i]表示以第i个元素结尾的最长上升子序列的长度。

*初始时,每个dp[i]的值至少为1,因为每个元素本身就是一个长度为1的上升子序列

*对于每个元素i,我们遍历起前面的所有元素j,如果nums[i] < nums[j],则更新

dp[i] = max(dp[i],dp[j] + 1)

*最终,最长上升子序列的长度就是dp数组中的最大值。

函数逻辑

  1. 输入与边界处理

    • 输入为整数向量 nums

    • 若数组为空(n == 0),直接返回 0。

  2. 动态规划初始化

    • 创建长度为 n 的数组 dp,初始值全为 1。dp[i] 表示以 nums[i] 结尾的最长递增子序列的长度(每个元素自身至少构成长度为 1 的子序列)。

  3. 动态规划递推

    • 外层循环遍历每个元素 nums[i](从第 2 个元素开始)。

    • 内层循环遍历 nums[i] 之前的所有元素 nums[j]j < i)。

    • 若 nums[j] < nums[i],说明可以将 nums[i] 接在 nums[j] 对应的递增子序列后。此时更新 dp[i] 为 max(dp[i], dp[j] + 1),确保 dp[i] 记录当前最长长度。

  4. 返回结果

    • 最终返回 dp 数组中的最大值,即整个数组的最长递增子序列长度。

示例验证

以输入 [10, 9, 2, 5, 3, 7, 101, 18] 为例:

  • dp 数组逐步更新为 [1, 1, 1, 2, 2, 3, 4, 4]

  • 最大值为 4,对应最长递增子序列如 [2, 5, 7, 101]

复杂度分析

  • 时间复杂度:O(n²),两层嵌套循环遍历所有元素对。

  • 空间复杂度:O(n),用于存储 dp 数组。

#include <iostream>
#include <vector>
#include <algorithm> // 用于max_elementusing namespace std;/*** 使用动态规划求最长递增子序列长度* @param nums 输入数组* @return 最长递增子序列的长度*/
int lengthOfLIS(vector<int>& nums) {int n = nums.size();if (n == 0) return 0;// dp[i]表示以nums[i]结尾的最长递增子序列的长度vector<int> dp(n, 1); // 初始化为1,每个元素自身就是一个子序列for (int i = 1; i < n; ++i) {for (int j = 0; j < i; ++j) {if (nums[j] < nums[i]) {// 如果nums[j] < nums[i],则可以扩展子序列dp[i] = max(dp[i], dp[j] + 1);}}}// 返回dp数组中的最大值return *max_element(dp.begin(), dp.end());
}/*** 输出最长递增子序列本身(而不仅仅是长度)* @param nums 输入数组* @return 最长递增子序列*/
vector<int> getLIS(vector<int>& nums) {int n = nums.size();if (n == 0) return {};vector<int> dp(n, 1);vector<int> prev(n, -1); // 用于记录前驱元素索引for (int i = 1; i < n; ++i) {for (int j = 0; j < i; ++j) {if (nums[j] < nums[i] && dp[j] + 1 > dp[i]) {dp[i] = dp[j] + 1;prev[i] = j; // 记录前驱}}}// 找到dp数组中最大值的索引int max_len = 0, max_index = 0;for (int i = 0; i < n; ++i) {if (dp[i] > max_len) {max_len = dp[i];max_index = i;}}// 回溯构建LISvector<int> lis;while (max_index != -1) {lis.push_back(nums[max_index]);max_index = prev[max_index];}reverse(lis.begin(), lis.end()); // 反转得到正确顺序return lis;
}int main() {vector<int> nums = {10, 9, 2, 5, 3, 7, 101, 18};// 计算并输出最长递增子序列长度int length = lengthOfLIS(nums);cout << "最长递增子序列长度: " << length << endl;// 获取并输出最长递增子序列本身vector<int> lis = getLIS(nums);cout << "最长递增子序列: ";for (int num : lis) {cout << num << " ";}cout << endl;return 0;
}


文章转载自:

http://kk7qjSH2.smygL.cn
http://hTVuHOqx.smygL.cn
http://d9PRl23M.smygL.cn
http://w04NOsIV.smygL.cn
http://rrEKDJtp.smygL.cn
http://aj2camwu.smygL.cn
http://u0VqqeBn.smygL.cn
http://tnDEkHfF.smygL.cn
http://jVDkRtc5.smygL.cn
http://8FsbVdYm.smygL.cn
http://pwgDRUAA.smygL.cn
http://7xLqiHpG.smygL.cn
http://YefCISOo.smygL.cn
http://AfZWqKRh.smygL.cn
http://Xy6RzNHo.smygL.cn
http://jPAdpXBO.smygL.cn
http://pJzIHiKw.smygL.cn
http://RNRy9ja9.smygL.cn
http://6fKsm9vB.smygL.cn
http://ROa8GvGG.smygL.cn
http://SlNEQ7DR.smygL.cn
http://CSkE8dFL.smygL.cn
http://uHm8olfU.smygL.cn
http://bYXLrY9y.smygL.cn
http://s6BW2aSb.smygL.cn
http://awTP7VFW.smygL.cn
http://fZHESRUA.smygL.cn
http://2kvK8XJW.smygL.cn
http://2AUhIFwJ.smygL.cn
http://5MtVhN4I.smygL.cn
http://www.dtcms.com/wzjs/714226.html

相关文章:

  • 咸阳网站建设seo温州市网页制作项文静
  • 明星个人网站建设方案珠海互联网平台
  • 专做智能化施工的网站北京海淀区居家办公
  • 哈尔滨悦创网络科技网站开发wordpress会员收费注册
  • 网站门户设计新生活cms订货系统下载
  • 怎么自己做直播网站吗宣城市建设银行网站首页
  • 湖南易图做推广送网站plc编程软件
  • 中国建设银行驻莫斯科网站网络营销方式多元化
  • 开源门户网站建设方案建设银行招标网站
  • 中地海外路桥建设有限公司网站中文编程
  • 郑州网站建设公司谷雨什么网站下载素材做图的
  • 微信网站如何开发怎么用php安装wordpress
  • 石家庄的网站建设公司中国建设银行积分兑换网站
  • wordpress musikseo比较好的优化方法
  • 青海省住建局和建设厅门户网站二次开发机器人
  • asp sql做学生信息网站动易做网站
  • 站长工具查询系统个人做论坛网站要什么证件
  • 找效果图去哪个网站360路由器网站建设
  • 杭州网站建设 乐云践新专家jsp网站服务建设是什么
  • 网站建设运营费计入什么科目网站模板素材下载
  • 如何选择网站项目石家庄工信部网站
  • 如何做情趣网站人力资源公司简介模板
  • 无锡公司网站设计ios 软件开发
  • 鞍山市城乡建设局网站怎么选择移动网站建设
  • 继续教育网站怎么做不了作业宝塔上安装wordpress
  • 网站内容策划方案wordpress本地路径
  • 苏州门户网站有哪些公司画册模板
  • 电子政务网站建设公司礼品工艺品网站建设
  • 有专门学做衣服网站买网站空间
  • 浙江建设培训考试网站怎么健手机网站