【动态规划-最长递增子序列(LIS)】力扣673.最长递增子序列的个数
给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。
注意 这个数列必须是 严格 递增的。
示例 1:
输入: [1,3,5,4,7]
输出: 2
解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。
示例 2:
输入: [2,2,2,2,2]
输出: 5
解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。

动态规划
class Solution {
public:int findNumberOfLIS(vector<int>& nums) {int n = nums.size();int maxLen = 0, ans = 0;vector<int> dp(n, 1), count(n, 1);for(int i = 0; i < n; i++){for(int j = 0; j < i; j++){if(nums[i] > nums[j]){if(dp[j] + 1 > dp[i]){ //发现更长的dp[i] = dp[j] + 1;count[i] = count[j];}else if(dp[j] + 1 == dp[i]){ //相同长度的不同子序列count[i] += count[j];}} }if(dp[i] > maxLen){maxLen = dp[i];ans = count[i];}else if(dp[i] == maxLen){ans += count[i];}}return ans;}
};

我们在求最长递增子序列的模板题(力扣300)的时候维护了一个数组dp[i]来记录结尾为nums[i]的最长公共递增子序列长度。在这道题目中,我们新增维护一个数组count[i]来记录结尾为i的最长公共子序列的长度。
那么要如何维护count呢?我们在循环中,一旦发现if(dp[j] + 1 > dp[i]),就说明发现了更长的公共子序列,那么这个时候,我们就重置count[i]为count[j],之所以重置为count[j]是因为count[j]代表着之前以nums[j]结尾的最长公共递增子序列的个数,那么有count[j]个最长公共递增子序列再加上当前的nums[i],就有count[j]种以nums[i]结尾的最长公共递增子序列。
然后再继续遍历以nums[i]结尾的最长公共递增子序列,如果发现了有相同长度的公共递增子序列,就加上这个以nums[j]结尾的最长公共子序列的数量count[j]。
在每次第一层循环结束时,以nums[i]结尾的最长公共递增子序列数量已经确定。由于我们要找的是所有循环过后的全局最长公共递增子序列数量,所以我们定义一个maxLen来储存最长的公共递增子序列长度,也定义一个整型ans来记录最长递增子序列的数量。
这道题目可以通过类似力扣300的方式使用前缀和以及二分查找的方式进行优化时间复杂度为nlogn。
相关文章:
【动态规划-最长递增子序列(LIS)】力扣673.最长递增子序列的个数
给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。 示例 2: 输入: [2,2,2,2,2] 输出: 5 解释:…...
SQL优化 where谓词条件is null优化
1.创建测试表及谓词条件中包含is null模拟语句 create table t641 as select * from dba_objects; set autot trace select SUBOBJECT_NAME,OBJECT_NAME from t641 where OBJECT_NAMEWRI$_OPTSTAT_SYNOPSIS$ and SUBOBJECT_NAME is null; 2.全表扫描逻辑读1237 3.创建等值谓词条…...
Starrocks 元数据恢复 failed to load journal type 10242
fe 启动异常 2024-10-08 09:24:57.66908:00 INFO (stateChangeExecutor|87) [DatabaseTransactionMgr.replayUpsertTransactionState():1702] remove expired transaction: TransactionState. txn_id: 189324, label: delete_031c5090-7e2d-11ef-bdd8-000c29967e13, db id: 100…...
《深度学习》神经语言模型 Word2vec CBOW项目解析、npy/npz文件解析
目录 一、关于word2vec 1、什么是word2vec 2、常用训练算法 1)CBOW 2)SkipGram 二、关于npy、npz文件 1、npy文件 1)定义 2)特性 3)用途 4)保存及读取 运行结果: 运行结果…...
黄粱一梦,镜花水月总是空
总有人间一两风,埋我十万八千梦 自古以来,梦在我们的生活中一直是一个神秘玄幻而又发人深省的存在,我们一生中有三分之一的时间都在睡觉,做过的梦也是丰富多彩数不胜数。 而从科学的角度来说,梦是我们潜意识里的生活…...
【分布式事务-01】分布式事务之2pc两阶段提交
redis系列整体栏目 内容链接地址【一】分布式事务之2pc两阶段提交https://zhenghuisheng.blog.csdn.net/article/details/142406325 分布式事务之2pc两阶段提交 一,分布式事务之2pc两阶段提交1,两阶段提交(2pc)2,2pc两阶段提交实现思路3&…...
docker 安装 rabbitMQ
第一步:准备工作 # 打开docker目录 [rootMuYu ~]# cd /usr/local/docker/ # 创建rabbitmq文件夹 [rootMuYu docker]# mkdir rabbitmq # 打开rabbitmq文件夹 [rootMuYu docker]# cd rabbitmq/ # 创建挂载目录 [rootMuYu rabbitmq]# mkdir data 第二步ÿ…...
知识改变命运 数据结构【java对象的比较】
0:前言 在基本数据类型中,我们可以直接使用号比较是否相等,还记的学堆哪里时候,插入一个数据,就会与其他数据进行比较,当时我们传入的是Integer类型,在Integer类里面已经实现了compare。 如果…...
01_23 种设计模式之《简单工厂模式》
文章目录 一、什么是设计模式二、设计模式类型简单工厂模式及应用场景定义抽象产品类和具体产品类实现工厂类客户端代码注意事项 一、什么是设计模式 设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,…...
Android 12.0 关于定制自适应AdaptiveIconDrawable类型的动态日历图标的功能实现系列一
1.前言 在12.0的系统rom定制化开发中,在关于定制动态日历图标中,原系统是不支持动态日历图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态日历 图标的背景图形也跟着改变,所以接下来就来…...
【源码+文档+调试讲解】基于安卓的小餐桌管理系统springboot框架
摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低运营人员成本,实现了小餐桌的标准化、制度化、程序化的管理,有效地防止了小餐桌的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修…...
C语言中的文件操作(二)
C语言中的文件操作(一)-CSDN博客https://blog.csdn.net/Xiaodao12345djs/article/details/142746010?spm1001.2014.3001.5501 四、文件的顺序读写 1、fputc (字符输出函数/写) 将一个字符写入文件中 #include <stdio.h>int main() {FILE* pf fo…...
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
文章目录 C 继承详解:初阶理解与实战应用前言第一章:继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章:继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…...
Ubuntu 22.04 安装 KVM
首先检查是否支持 CPU 虚拟化,现在的 CPU 都应该支持,运行下面的命令,大于0 就是支持。 egrep -c (vmx|svm) /proc/cpuinfo安装 Libvirt apt install -y qemu-kvm virt-manager libvirt-daemon-system virtinst libvirt-clients bridge-uti…...
101 公司战略的基本概念
公司战略的概念 传统概念(战略是终点途径):计划性、全局性、长期性现代概念(战略是途径):应变性、竞争性、风险性综合概念(前二者的折中):预先性、反应性公司的使命与目标…...
【devops】devops-ansible之剧本初出茅庐--搭建rsync和nfs
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》从问题中去学习k8s 《docker学习》暂未更…...
@RestController 和 @Controller 注解的联系及要点
1. RestController • RestController 是 Spring 4.0 引入的一个注解,它相当于 Controller ResponseBody组合注解。 主要作用:主要用于构建 RESTful Web 服务。标注 RestController 的类里的所有方法,返回的都是 JSON 或 XML 等格式的数据…...
机器学习篇-day03-线性回归-正规方程与梯度下降-模型评估-正则化解决模型拟合问题
一. 线性回归简介 定义 线性回归(Linear regression)是利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 回归方程(函数) 一元线性回归: y kx b > wx b k: 斜率, 在机器学习中叫 权重(weight), 简称: w b: 截距, 在机…...
图像人脸与视频人脸匹配度检测
import cv2 import dlib import numpy as np import os from pathlib import Path# 加载预训练模型 face_recognition_model "dlib_face_recognition_resnet_model_v1.dat" face_recognition_net dlib.face_recognition_model_v1(face_recognition_model)detector …...
【AI绘画】Midjourney进阶:对称构图详解
博客主页: [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯什么是构图为什么Midjourney要使用构图 💯对称构图特点使用场景提示词书写技巧测试 💯小结 💯前言 通常来学习AI绘画的人可以分为…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
深度解析:etcd 在 Milvus 向量数据库中的关键作用
目录 🚀 深度解析:etcd 在 Milvus 向量数据库中的关键作用 💡 什么是 etcd? 🧠 Milvus 架构简介 📦 etcd 在 Milvus 中的核心作用 🔧 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...
高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...
