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

【动态规划-最长递增子序列(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 &#xff0c; 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列&#xff0c;分别是 [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&#xff09;CBOW 2&#xff09;SkipGram 二、关于npy、npz文件 1、npy文件 1&#xff09;定义 2&#xff09;特性 3&#xff09;用途 4&#xff09;保存及读取 运行结果&#xff1a; 运行结果&#xf…...

黄粱一梦,镜花水月总是空

总有人间一两风&#xff0c;埋我十万八千梦 自古以来&#xff0c;梦在我们的生活中一直是一个神秘玄幻而又发人深省的存在&#xff0c;我们一生中有三分之一的时间都在睡觉&#xff0c;做过的梦也是丰富多彩数不胜数。 而从科学的角度来说&#xff0c;梦是我们潜意识里的生活…...

【分布式事务-01】分布式事务之2pc两阶段提交

redis系列整体栏目 内容链接地址【一】分布式事务之2pc两阶段提交https://zhenghuisheng.blog.csdn.net/article/details/142406325 分布式事务之2pc两阶段提交 一&#xff0c;分布式事务之2pc两阶段提交1&#xff0c;两阶段提交(2pc)2&#xff0c;2pc两阶段提交实现思路3&…...

docker 安装 rabbitMQ

第一步&#xff1a;准备工作 # 打开docker目录 [rootMuYu ~]# cd /usr/local/docker/ # 创建rabbitmq文件夹 [rootMuYu docker]# mkdir rabbitmq # 打开rabbitmq文件夹 [rootMuYu docker]# cd rabbitmq/ # 创建挂载目录 [rootMuYu rabbitmq]# mkdir data 第二步&#xff…...

知识改变命运 数据结构【java对象的比较】

0&#xff1a;前言 在基本数据类型中&#xff0c;我们可以直接使用号比较是否相等&#xff0c;还记的学堆哪里时候&#xff0c;插入一个数据&#xff0c;就会与其他数据进行比较&#xff0c;当时我们传入的是Integer类型&#xff0c;在Integer类里面已经实现了compare。 如果…...

01_23 种设计模式之《简单工厂模式》

文章目录 一、什么是设计模式二、设计模式类型简单工厂模式及应用场景定义抽象产品类和具体产品类实现工厂类客户端代码注意事项 一、什么是设计模式 设计模式&#xff1a;在软件研发过程中&#xff0c;经过实战验证&#xff0c;用于解决在特定环境下、重复出现的&#xff0c;…...

Android 12.0 关于定制自适应AdaptiveIconDrawable类型的动态日历图标的功能实现系列一

1.前言 在12.0的系统rom定制化开发中,在关于定制动态日历图标中,原系统是不支持动态日历图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态日历 图标的背景图形也跟着改变,所以接下来就来…...

【源码+文档+调试讲解】基于安卓的小餐桌管理系统springboot框架

摘 要 相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低运营人员成本&#xff0c;实现了小餐桌的标准化、制度化、程序化的管理&#xff0c;有效地防止了小餐桌的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地查询和修…...

C语言中的文件操作(二)

C语言中的文件操作&#xff08;一&#xff09;-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 继承详解&#xff1a;初阶理解与实战应用前言第一章&#xff1a;继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章&#xff1a;继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…...

Ubuntu 22.04 安装 KVM

首先检查是否支持 CPU 虚拟化&#xff0c;现在的 CPU 都应该支持&#xff0c;运行下面的命令&#xff0c;大于0 就是支持。 egrep -c (vmx|svm) /proc/cpuinfo安装 Libvirt apt install -y qemu-kvm virt-manager libvirt-daemon-system virtinst libvirt-clients bridge-uti…...

101 公司战略的基本概念

公司战略的概念 传统概念&#xff08;战略是终点途径&#xff09;&#xff1a;计划性、全局性、长期性现代概念&#xff08;战略是途径&#xff09;&#xff1a;应变性、竞争性、风险性综合概念&#xff08;前二者的折中&#xff09;&#xff1a;预先性、反应性公司的使命与目标…...

【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 引入的一个注解&#xff0c;它相当于 Controller ResponseBody组合注解。 主要作用&#xff1a;主要用于构建 RESTful Web 服务。标注 RestController 的类里的所有方法&#xff0c;返回的都是 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进阶:对称构图详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;什么是构图为什么Midjourney要使用构图 &#x1f4af;对称构图特点使用场景提示词书写技巧测试 &#x1f4af;小结 &#x1f4af;前言 通常来学习AI绘画的人可以分为…...

2026年阿里云OpenClaw/Hermes Agent配置Token Plan新手友好流程

2026年阿里云OpenClaw/Hermes Agent配置Token Plan新手友好流程。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

graph-autofusion:CANN 的自动算子融合引擎

GE 的图优化 pass 里&#xff0c;算子融合是对推理性能影响最大的一个。但 GE 的融合规则是硬编码的——ConvBNReLU 写一条规则&#xff0c;BMMSoftmaxBMM 写一条规则。规则多了维护成本直线上升&#xff0c;总有覆盖不到的融合场景。 graph-autofusion 解决了这个问题。它是一…...

asnumpy:NPU 原生的 NumPy 体验

如果你用 Python 做 AI 开发&#xff0c;大概率写过类似这样的代码&#xff1a;用 NumPy 预处理数据&#xff0c;把结果转成 PyTorch Tensor&#xff0c;推理完再转回 NumPy 做后处理。这个过程里数据在 CPU 和 NPU 之间来回拷贝了一次&#xff0c;拖慢了整体速度。 CANN 的 a…...

重磅喜报!中国星坤入围东莞上规资助计划,政企携手共筑智造标杆

近日&#xff0c;东莞市工业和信息化局正式公布 2026 年支持工业企业上规发展做大做强项目拟资助计划&#xff0c;中国星坤&#xff08;XKB Connection&#xff09;凭借在电子连接器领域的技术实力与稳健发展&#xff0c;成功入选&#xff0c;成为东莞智造升级的标杆企业之一东…...

Redis详解以应用场景

一、Redis简介 1.1 什么是Redis Redis Remote Dictionary Service&#xff08;远程字典服务&#xff09; 传统数据库&#xff1a;数据存储在磁盘&#xff0c;访问需要磁盘IO└── 速度慢&#xff0c;但数据持久化Redis&#xff1a;所有数据存储在内存└── 速度极快&#xf…...

用逻辑分析仪实测STC15W408AS驱动BLDC电机:PWM波形与换相时序全解析

用逻辑分析仪实测STC15W408AS驱动BLDC电机&#xff1a;PWM波形与换相时序全解析 当硬件电路搭建完成&#xff0c;代码烧录进单片机后&#xff0c;真正的挑战才刚刚开始——如何验证那些看不见的电信号是否按预期工作&#xff1f;本文将以STC15W408AS驱动无感BLDC电机为例&#…...

6G通信中的HMA天线技术:原理、优势与应用

1. HMA天线技术概述在6G通信和大规模MIMO系统的发展背景下&#xff0c;Huygens Metasurface Antennas&#xff08;HMA&#xff09;技术正逐渐成为无线通信领域的研究热点。作为一名长期从事天线系统设计的工程师&#xff0c;我见证了从传统相控阵到现代超表面天线的技术演进历程…...

如何用icloudpd轻松备份你的iCloud照片库:终极免费解决方案

如何用icloudpd轻松备份你的iCloud照片库&#xff1a;终极免费解决方案 【免费下载链接】icloud_photos_downloader A command-line tool to download photos from iCloud 项目地址: https://gitcode.com/GitHub_Trending/ic/icloud_photos_downloader 你是否曾担心珍贵…...

Linux GPIO框架深度解析:从用户空间到内核驱动的完整路径

1. 项目概述&#xff1a;为什么要在Linux下研究GPIO&#xff1f;搞嵌入式开发的朋友&#xff0c;对GPIO&#xff08;通用输入输出&#xff09;肯定不陌生。它就像芯片的“手脚”&#xff0c;负责最简单的电平控制和信号读取。在单片机时代&#xff0c;我们通常直接操作寄存器&a…...

Dify系列课程 - 5.Ollama:轻松驾驭本地大语言模型(在 Windows 上安装 Ollama 并部署 DeepSeek 大模型)

Ollama 安装Deepseek大模型 Ollama 大模型安装完成...