3177. 求出最长好子序列 II / 3176. 求出最长好子序列 I(24.9.7 / 24.9.8)

ops/2024/10/11 13:26:26/

昨日与今日题目相同,只有数据量变大了

题目

给定一个整数数组 nums 和一个非负整数 k。如果一个整数序列 seq 在范围下标范围 [0, seq.length - 2] 中存在不超过 k 个下标 i 满足 seq[i]!=seq[i + 1],那么称这个整数序列为好序列。要求返回 nums 中好子序列的最长长度。

示例 1
输入:nums = [1,2,1,1,3]k = 2
输出:4
解释:最长好子序列为 [1,2,1,1]

示例 2
输入:nums = [1,2,3,4,5,1]k = 0
输出:2
解释:最长好子序列为 [1,1]

提示

  1. 1 <= nums.length <= 5 * 10^3
  2. 1 <= nums[i] <= 109
  3. 0 <= k <= min(50, nums.length)

解题思路

见代码

代码

/*
#1 作为第 i 个数,其有三种情况:1.单独作为一个子序列2.和上一个好子序列的最后一个相同,加入到结尾3.和上一个好子序列的最后一个不相同,但是不超过k,加入到结尾#2 所需要的跟踪信息有:子序列的结尾数,相邻不同的个数#3 dp的构造://1 构造dp[i][j],表示以 nums[i] 作为结尾,至多有 j 个相邻不同的子序列,记录这个下面的最长子序列的长度//2 根据 #1 得出下方:1.作为子序列的第一个数,dp[i][j]+1;2.作为系序列的末尾,并于末尾的数相同,dp[i][j]+1;3.作为子序列的末尾,并于末尾的数相同,dp[i][j]=dp[y][j-1]+1;//y为0~i//3 dp[i][j]的空间大小:i的值为0~n-1,j的值为0~k
#1 优化//dp构造优化:根据 #3 的 //1 可以优化构造的方式,其中前面的dp[i]表示以nums[i]作为结尾,我们可以通过哈希的方式快速构建unordered_map<int,vector<int>> dp;//最大值的维护(对于昨日的I,可以通过暴力枚举y的值而得到,而对于本体暴力枚举则会超时)假设最大值为max_v[j-1],用于记录dp[y][j-1]的最大值,避免多次寻找y的最大值*/
class Solution {
public:int maximumLength(vector<int>& nums, int k) {unordered_map<int,vector<int>> dp;vector<int> max_v(k+2);for(int num:nums){auto& d=dp[num];d.resize(k+1);for(int j=k;j>=0;j--){//正着循环则会导致同一个数被统计多次d[j]=max(d[j],max_v[j])+1;max_v[j+1]=max(max_v[j+1],d[j]);}}return max_v[k+1];}
};

http://www.ppmy.cn/ops/107226.html

相关文章

基础物理-向量3

总结 标量和向量 标量&#xff0c;如温度&#xff0c;仅具有大小。它们通过一个带有单位的数字&#xff08;例如 10C&#xff09;表示&#xff0c;并遵循算术和普通代数的规则。向量&#xff0c;如位移&#xff0c;既具有大小又具有方向&#xff08;例如 5 米&#xff0c;向北…

Flutter 局部变量刷新问题

在Flutter中&#xff0c;当你调用setState时&#xff0c;它会触发Widget树的重新构建。这意味着任何依赖于状态的Widget都会重新构建&#xff0c;从而反映新的状态值。但是&#xff0c;具体的刷新行为取决于dd是如何定义和使用的。 让我们来看看两种情况下setState的行为&…

bash反弹shell分析

目录 介绍步骤 介绍 与目标主机建立连接的原理是利用漏洞执行ShellCode。 GetShell的实质是&#xff1a;执行ShellCode&#xff0c;将目标主机的Shell重定向到攻击机。拿到Shell利于后续的渗透。 所谓的反弹Shell是指GetShell的过程由目标主机主动发起&#xff08;反向连接&a…

微信小程序显示后台文章副文本,图片和视频正常显示

解决方案: 使用 wxParse 或 rich-text 组件: 这两种方式可以解析 HTML 字符串并渲染富文本内容&#xff0c;包括图片和视频。 数据处理: 将后台返回的富文本数据进行处理&#xff0c;提取出图片和视频的链接&#xff0c;并将其转换成小程序支持的格式。 方案一&#xff1a;使…

【深入解析】AI工作流中的HTTP组件:客户端与服务端执行的区别

在当今快速发展的技术环境中&#xff0c;AI工作流的设计和实现变得愈发重要。尤其是在处理HTTP组件时&#xff0c;前端执行与后端执行之间的区别&#xff0c;往往会对系统的安全性和数据的准确性产生深远的影响。今天&#xff0c;我们就来深入探讨这一话题&#xff0c;揭示前端…

FPGA实现串口升级及MultiBoot(二)FPGA启动流程

这个系列开篇肯定要先了解FPGA的启动流程&#xff0c;试想一下&#xff1a;我想实现MultiBoot&#xff0c;那么我应该在什么时候开始升级&#xff0c;升级失败后FPGA进行了哪些操作&#xff0c;以及怎么回到Golden区&#xff1f; 还有一个问题&#xff0c;就是我硬件打板回来&a…

Jmeter使用时小技巧添加“泊松随机定时器“模拟用户思考时间

1、模拟用户思考时间&#xff0c;添加"泊松随机定时器"

换枪盘在汽车领域的革新应用

工业机器人在近几年经历了爆发式增长&#xff0c;2020-2021年&#xff0c;工业机器人的增长驱动主要得益于新能源汽车需求爆发。2023年二季度&#xff0c;中国工业机器人产量11.82万台&#xff0c;实际同比增长2.55%&#xff1b;上半年产量为22.21万台&#xff0c;实际同比增长…