Leetcode 3351. Sum of Good Subsequences

  • Leetcode 3351. Sum of Good Subsequences
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3351. Sum of Good Subsequences

1. 解题思路

这一题算是一个比较典型的动态规划的题目。

我们首先定义两个动态规划的数组 c i c_i ci s i s_i si,分别表示:

  • c i c_i ci: 以第 i i i个位置作为起点的满足条件的子序列的个数
  • s i s_i si:以第 i i i个位置作为起点的满足条件的子序列元素之和的总和

则显然我们可以给出递推关系:

c i = 1 + ∑ j = i + 1 N δ ( n i − 1 − n j ) ⋅ c j + ∑ j = i + 1 N δ ( n i + 1 − n j ) ⋅ c j s i = c i ⋅ n i + ∑ j = i + 1 N δ ( n i − 1 − n j ) ⋅ s j + ∑ j = i + 1 N δ ( n i + 1 − n j ) ⋅ s j \begin{aligned} c_{i} &= 1 + \sum\limits_{j=i+1}^{N}\delta(n_i-1 - n_j)\cdot c_j + \sum\limits_{j=i+1}^{N}\delta(n_i+1 - n_j)\cdot c_j \\ s_{i} &= c_i \cdot n_i + \sum\limits_{j=i+1}^{N}\delta(n_i-1 - n_j)\cdot s_j + \sum\limits_{j=i+1}^{N}\delta(n_i+1 - n_j)\cdot s_j \end{aligned} cisi=1+j=i+1Nδ(ni1nj)cj+j=i+1Nδ(ni+1nj)cj=cini+j=i+1Nδ(ni1nj)sj+j=i+1Nδ(ni+1nj)sj

其中, n i n_i ni表示第 i i i个元素的值, δ ( x ) \delta(x) δ(x)函数的定义为当且仅当 x = 0 x=0 x=0 δ ( x ) = 1 \delta(x) = 1 δ(x)=1,其他时候均有 δ ( x ) = 0 \delta(x) = 0 δ(x)=0

此时,我们只需要另外再使用两个hashmap来记录当前所有值下对应的 ∑ j = i + 1 N δ ( x − n j ) ⋅ c j \sum\limits_{j=i+1}^{N}\delta(x-n_j)\cdot c_j j=i+1Nδ(xnj)cj以及 ∑ j = i + 1 N δ ( x − n j ) ⋅ s j \sum\limits_{j=i+1}^{N}\delta(x-n_j)\cdot s_j j=i+1Nδ(xnj)sj这两个值即可。

然后,我们就可以用一个逆序的动态规划快速得到我们最终的答案了。

2. 代码实现

给出python代码实现如下:

MOD = 10**9+7

class Solution:
    def sumOfGoodSubsequences(self, nums: List[int]) -> int:
        n = len(nums)
        cnt = [0 for _ in range(n)]
        s = [0 for _ in range(n)]
        cumcnt = defaultdict(int)
        cumsum = defaultdict(int)
        for i in range(n-1, -1, -1):
            cnt[i] = (1 + cumcnt[nums[i]-1] + cumcnt[nums[i]+1]) % MOD
            s[i] = (nums[i] + (cumcnt[nums[i]-1]+cumcnt[nums[i]+1])*nums[i] + cumsum[nums[i]-1] + cumsum[nums[i]+1]) % MOD
            
            cumcnt[nums[i]] += cnt[i]
            cumsum[nums[i]] += s[i]

        ans = 0
        for x in s:
            ans = (ans+x) % MOD
        return ans

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915665.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

专题十八_动态规划_斐波那契数列模型_路径问题_算法专题详细总结

目录 动态规划 动态规范五步走: 1. 第 N 个泰波那契数(easy) 解析: 1.状态表达式: 2.状态转移方程: 3.初始化: 4.填表顺序: 5.返回值 编写代码: 总结&#xff…

MySQL技巧之跨服务器数据查询:基础篇-更新语句如何写

MySQL技巧之跨服务器数据查询:基础篇-更新语句如何写 上一篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQL 以及用同样的…

C/C++语言 多项式加法和乘法

多项式加法和乘法 多项式的加法题目描述输入输出样例步骤代码段全局变量设定新建结点合并链表 完整代码 多项式乘法题目描述输入输出样例代码段计算两多项式结果输入 完整代码 多项式的加法 题目描述 输入输出 样例 步骤 总体思想是用链表来做 ① 我们发现输入样例中&#xf…

ArkTs面向对象编程

ArkTs面向对象编程 1.1 面向对象编程概述 1.1.1 什么是面向对象编程 面向对象编程是一种编程范式,它使用“对象”来设计软件和创建可重用的程序设计 对象是包含数据和方法的实体,可以与其他对象进行交互 面相对象编程鼓励使用已有的对象来组合或修改以…

乳腺癌诊断分析——基于聚类分析实现

一、研究背景 乳腺癌属于恶性肿瘤,在早期发现后需要及早将病变组织切除,而且术后还要化疗和放射等辅助治疗,能够抑制癌细胞的扩散和增长。 二、研究目的 研究乳腺癌病人的患病特征通过聚类分析方法对特征进行分类通过上述聚类结果对乳腺诊…

丹摩征文活动|FLUX.1 和 ComfyUI:从部署到上手,轻松驾驭!

FLUX.1 和 ComfyUI:从部署到上手,轻松驾驭! FLUX.1历史曲线 黑森林实验室推出了一款名为FLUX.1的先进图像生成模型,根据不同用户需求,提供了三种独特的版本。 FLUX.1-pro:作为专为企业打造的强大闭源版本…

数据分析:16s差异分析DESeq2 | Corncob | MaAsLin2 | ALDEx2

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍DESeq2原理计算步骤结果Corncob原理计算步骤结果MaAsLin2原理计算步骤结果ALDEx2原理计算步骤结果加载R包数据链接数据预处理微生物数据样本信息提取物种名称过滤零值保留结果读取…

OCR识别铁路电子客票

随着中国铁路客运领域进入全面数字化时代,国家税务总局、财政部和国铁集团于2024年10月18日联合发布公告,自2024年11月1日起,推广使用“电子发票(铁路电子客票)”。这一举措不仅为旅客出行提供了极大的便利&#xff0c…

【MySQL基础刷题】总结题型(三)

十题左右,便于复习 1.查询结果的质量和占比2.每月交易I3.销售分析III4.只出现一次的最大数字5.买下所有产品的客户6.员工的直属部门7.指定日期的产品价格 1.查询结果的质量和占比 avg大神啊… SELECT query_name, ROUND(avg(rating / position), 2) as quality, …

python 同时控制多部手机

在这个智能时代,我们的手机早已成为生活和工作中不可或缺的工具。无论是管理多个社交媒体账号,还是处理多台设备上的事务,如何更高效地控制多个手机成为了每个人的痛点。 今天带来的这个的软件为你提供了一键控制多部手机的强大功能。无论是办公、娱乐,还是社交,你都能通过…

外星人入侵

学习于Python编程从入门到实践(Eric Matthes 著) 整体目录:外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站:Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果:可以上下左右移…

前端监控与埋点 全总结

一、概念 前端埋点是指在网页或者应用程序中插入特定的代码,用于收集用户的行为数据并发送给服务器进行分析。这些数据可以包括用户的点击、浏览、输入等操作,帮助开发者了解用户的在其网站中的行为,从而进行针对性的优化和改进。 前端埋点…

Python简单文件操作day9

1、文件操作的重要性和场景 重要性: 数据持久化、跨平台兼容性、数据备份与恢复、数据共享、配置管理、日志记录 应用场景: 数据分析、web开发、文本处理 2、文件的概念 文件是一个存储在某种持久性存储介质【硬盘、光盘、磁盘等】上的数据的结合。 …

指令存储和指令流水线

要求存储器的编址单位,首先观察到计算机采用的是32位定长指令字,因此一条指令就是32位,即4B,根据表中可知一条指令所占地址空间为08048104H-08048100H4H,因此所用的编制单位为字节(B) 将所有指令…

kafka管理工具

文章目录 前言一、Kafka Assistan1.1 描述1.2、配置安装 二、Conduktor2.1、描述2.2、配置安装 三、kafka-maneger3.1、描述3.2、配置安装3.3、命令启动3.4、[refer to](https://www.ctyun.cn/document/10000120/10033218#section-39755766f4910e4b) 前言 提示:这里…

JavaWeb常见注解

1.Controller 在 JavaWeb 开发中,Controller是 Spring 框架中的一个注解,主要用于定义控制器类(Controller),是 Spring MVC 模式的核心组件之一。它表示该类是一个 Spring MVC 控制器,用来处理 HTTP 请求并…

axios平替!用浏览器自带的fetch处理AJAX(兼容表单/JSON/文件上传)

fetch 是啥? fetch 函数是 JavaScript 中用于发送网络请求的内置 API,可以替代传统的 XMLHttpRequest。它可以发送 HTTP 请求(如 GET、POST 等),并返回一个 Promise,从而简化异步操作 基本用法 /* 下面是…

window任务计划记录中显示操作成功,但是代码只执行了第一句命令

一、创建定时任务 1. Windows键R 调出此窗口,输入compmgmt.msc (调用的是计算机管理) 2. 创建基本任务 在任务计划程序中右键 选择 创建基本任务。 输入任务名称及描述。 下一步中选择触发器的时间,这里选择每天。 选择开始时间&…

使用VSCode远程连接服务器并解决Neo4j无法登陆问题

摘要:本文介绍了如何通过VSCode连接内网部署的Neo4j服务器,并启动服务。在访问Neo4j登录界面时,遇到了端口映射问题导致无法登录。通过手动添加7687端口的映射后,成功登录Neo4j。 我在内网部署了一台服务器,并在其上运…

【异常解决】Linux shell报错:-bash: [: ==: 期待一元表达式 解决方法

博主介绍:✌全网粉丝21W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…