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

Leetcode 3177. Find the Maximum Length of a Good Subsequence II

  • Leetcode 3177. Find the Maximum Length of a Good Subsequence II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3177. Find the Maximum Length of a Good Subsequence II

1. 解题思路

这一题我一开始的思路是直接使用暴力的动态规划的方式进行实现,结果遇到了内存爆炸的问题,后来看了一下别人的回答,整体的思路还是动态规划,但是存储结构上做了一些优化。

本质来说都是要做这么一个事:

if pre_num == nums[idx]:dp(idx, pre_num, k) = 1 + dp(idx+1, pre_num, k)
else:dp(idx, pre_num, k) = max(dp(idx+1, pre_num, k), 1 + dp(idx+1, nums[idx], k))

然后到具体实现上,如果直接这么实现无论是内存还是时间都扛不住,因此我们需要稍微做点优化,具体来说就是首先对pre_num进行一下cache,具体来说的话这里其实就是要分两种情况:

  • 如果当前的数和前一个取值相同的情况
  • 如果当前的数和前一个取值不同的情况

对于前者,我们不得不使用一个cache来存储所有可能的取值下的情况,对于后者,严格来说我们必须要找不同的情况,但是事实上我们可以偷个懒,直接取全部的情形,前者是后者的一个子集。

通过这种方式,就能够通过所有的测试样例……

2. 代码实现

给出python代码实现如下:

class Solution:def maximumLength(self, nums: List[int], k: int) -> int:n = len(nums)dp = [[0 for _ in range(k+1)] for _ in range(n)]same = [defaultdict(int) for _ in range(k+1)]diff = [0 for _ in range(k+1)]ans = 0for i, num in enumerate(nums):dp[i][0] = 1for j in range(k+1):dp[i][j] = 1 + same[j][num]if j > 0:dp[i][j] = max(dp[i][j], diff[j-1]+1)ans = max(ans, dp[i][j])for j in range(k+1):same[j][num] = max(same[j][num], dp[i][j])diff[j] = max(diff[j], dp[i][j])return ans

提交代码评测得到:耗时2052ms,占用内存29.4MB。

相关文章:

  • C# 共享内存
  • Linux操作系统:Zookeeper在虚拟环境下的安装与部署
  • 手撸一个java简易聊天室
  • 【UML用户指南】-13-对高级结构建模-包
  • Windows 搭建C++ 纯开源开发环境 进行 YOLOv8 模型推理的开发测试环境
  • 快速开始一个go程序(极简-快速入门)
  • 基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析
  • Java24:会话管理 过滤器 监听器
  • 深度解析地铁票务系统的技术架构与创新应用
  • 技术人如何打造研发团队
  • 安利一款非常不错浏览器文本翻译插件(效果很不错,值得一试)
  • 【数据结构】图之邻接矩阵代码实现与dfs、bfs
  • c语言:自定义类型(枚举、联合体)
  • 网络流媒体协议——HLS协议
  • MySQL实体类框架
  • Angular2开发踩坑系列-生产环境编译
  • js如何打印object对象
  • React Native移动开发实战-3-实现页面间的数据传递
  • vue 配置sass、scss全局变量
  • web标准化(下)
  • Web设计流程优化:网页效果图设计新思路
  • 分布式任务队列Celery
  • 扑朔迷离的属性和特性【彻底弄清】
  • 普通函数和构造函数的区别
  • 前端性能优化--懒加载和预加载
  • 前嗅ForeSpider中数据浏览界面介绍
  • 说说动画卡顿的解决方案
  • 我感觉这是史上最牛的防sql注入方法类
  • 项目管理碎碎念系列之一:干系人管理
  • 译米田引理
  • 鱼骨图 - 如何绘制?
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ###项目技术发展史
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (正则)提取页面里的img标签
  • (转)IOS中获取各种文件的目录路径的方法
  • .chm格式文件如何阅读
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .net操作Excel出错解决
  • .NET技术成长路线架构图
  • .NET建议使用的大小写命名原则
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET学习全景图
  • .Net中间语言BeforeFieldInit
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @RestControllerAdvice异常统一处理类失效原因
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [BSGS算法]纯水斐波那契数列