当前位置: 首页 > 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。

http://www.lryc.cn/news/372915.html

相关文章:

  • 程序员做电子书产品变现的复盘(2)
  • Java中的JVM是什么?如何调优JVM的性能?
  • 大型医院手术麻醉系统源码,前端采用Vue,Ant-Design开发,稳定成熟
  • Linux安装Docker | 使用国内镜像
  • redis易懂快速安装(linux)2024
  • 关于数据库存储【\】转义字符反斜杠丢失的问题
  • Unity3D 如何做好版本控制
  • 移动端消息中心,你未必会设计,发一些示例出来看看。
  • Non-zero exit code pycharm
  • 西门子学习笔记12 - BYTE-REAL互相转化
  • 科技云报道:“元年”之后,生成式AI将走向何方?
  • DAY02 HTML
  • 【Windchill监听器、队列、排程】
  • 统计信号处理基础 习题解答10-14
  • APP各种抓包教程
  • web前端开发项目教学:深入剖析四大核心、五大技能、六大实战、七大建议
  • 从入门到高手的99个python案例(2)
  • btstack协议栈实战篇--Performance - Stream Data over SPP (Server)
  • ThinkPHP5.0 apache服务器配置URL重写,index.php去除
  • 《TCP/IP网络编程》(第十五章)套接字和标准I/O
  • 认识一些分布函数-Gumbel分布
  • C语言之void类型的本质
  • Wall国内开源程序照片墙,支持VR全景及安装教程
  • 七个备受欢迎的IntelliJ IDEA实用插件
  • HDFS架构
  • 【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树
  • 【会议征稿,IEEE出版】第六届物联网、自动化和人工智能国际学术会议(IoTAAI 2024,7月26-28)
  • Flask-Logging
  • go匿名函数
  • ZED双目相机环境配置