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

leetcode 300. Longest Increasing Subsequence

目录

题目描述

第一步,明确并理解dp数组及下标的含义 

第二步,分析明确并理解递推公式

第三步,理解dp数组如何初始化

第四步,理解遍历顺序

代码


题目描述

这是动态规划解决子序列问题的例子。

第一步,明确并理解dp数组及下标的含义 

        int n = nums.size();

        //nums[0,i]表示从第0个数一直到第i个数(包含第i个数)的子数组,dp[i]表示子数组nums[0,i]中的最长严格递增子序列的长度。

        vector<int> dp(n,1);//所有的dp[i]都初始化为1,含义是nums[i]这一个数自身一定是一个子序列

第二步,分析明确并理解递推公式

给定i,需要对对所有0<=j<i的nums[j]逐个考察

                if(nums[i] > nums[j]){

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

                }

第三步,理解dp数组如何初始化

vector<int> dp(n,1);//所有的dp[i]都初始化为1,含义是nums[i]这一个数自身一定是一个子序列

第四步,理解遍历顺序

i的遍历顺序应该从小到大。起止范围是[0,n-1]。

j的遍历顺序从小到大或者从大到小都可以,起止范围是[0,i-1]。

代码

class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();//nums[0,i]表示从第0个数一直到第i个数(包含第i个数)的子数组,dp[i]表示子数组nums[0,i]中的最长严格递增子序列的长度。vector<int> dp(n,1);//所有的dp[i]都初始化为1,含义是nums[i]这一个数自身一定是一个子序列int maxLen = dp[0];for(int i = 1;i < n;i++){for(int j = 0;j < i;j++){if(nums[i] > nums[j]){dp[i] = max(dp[j]+1,dp[i]);}}if(dp[i] > maxLen)maxLen = dp[i];}return maxLen;}
};

相关文章:

  • C#.net core部署IIS
  • CSS中的`transform-style`属性:3D变换的秘密武器
  • LeetCode 热题 100:回溯
  • sqlilabs-Less之HTTP头部参数的注入——基础篇
  • QML中的3D功能--模型导入与修改
  • QML中的3D功能--入门开发
  • Doris 本地部署集群重启后报错
  • 可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型
  • 【信息获取能力】
  • DevOps 进阶指南:如何让工作流更丝滑?
  • 爬虫入门与requests库的使用——python爬虫
  • BMS电池管理芯片BQ76920芯片手册详细解读
  • 不带无线网卡的Linux开发板上网方法
  • 10-DevOps-Jenkins参数化构建实现多版本发布
  • 数据分析与挖掘
  • Python语法系列博客 · 第7期[特殊字符] 列表推导式与字典推导式:更优雅地处理数据结构
  • Flutter学习 滚动组件(2):ListView进阶使用
  • 如何防止接口被刷
  • Elasticsearch只返回指定的字段(用_source)
  • 数据可视化(Matplotlib和pyecharts)
  • 新华保险一季度净赚58.82亿增19%,保费收入增28%
  • 这座“蚌埠住了”的城市不仅会接流量,也在努力成为文旅实力派
  • 大学男生被捉奸后将女生推下高楼?桂林理工大学辟谣
  • 卸任兰大校长后,严纯华院士重返北大作报告
  • 来伊份一季度净利减少近八成,今年集中精力帮助加盟商成功
  • 工信部:加快自动驾驶系统安全要求强制性国家标准研制