Leetcode 3351. Sum of Good Subsequences

news2024/11/14 11:38:50
  • 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。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac 中python 安装mysqlclient 出现 ld: library ‘ssl‘ not found错误

1. 出现报错 2. 获取openssl位置 brew info openssl 3. 配置环境变量(我的是在~/.bash.profile) export LDFLAGS"-L/opt/homebrew/Cellar/openssl3/3.4.0/lib" export CPPFLAGS"-I/opt/homebrew/Cellar/openssl3/…

qt QClipboard详解

1、概述 QClipboard是Qt框架中的一个类,它提供了对窗口系统剪贴板的访问能力。剪贴板是一个临时存储区域,通常用于在应用程序之间传递文本、图像和其他数据。QClipboard通过统一的接口来操作剪贴板内容,使得开发者能够方便地实现剪切、复制和…

第3篇 滑动开关控制LED__ARM汇编语言工程<一>

Q:如何设计实现滑动开关控制LED的ARM汇编程序呢?与Nios II汇编语言有何不同呢? A:基本原理:该应用程序用到DE1-SoC开发板上的10个红色LED、10个滑动开关SW和4个按钮开关。DE1-SoC_Computer system的qsys系统中IP的硬件…

Jenkins安装自定义插件

看到这个博客,你可能遇到跟我一样的问题:直接使用jenkins插件时,在线安装的插件可能版本不符合要求。 怎么办呢 找到相关插件的版本 https://plugins.jenkins.io/build-name-setter/ 下载相应版本 安装

uniapp—android原生插件开发(4uniapp引用aar插件)

本篇文章从实战角度出发,将UniApp集成新大陆PDA设备RFID的全过程分为四部曲,涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程,轻松应对安卓原生插件开发与打包需求! 一、将android程序打包成aar插件包 直接使…

FFMPEG录屏(22)--- Linux 下基于X11枚举所有显示屏,并获取大小和截图等信息

众人拾柴火焰高,github给个star行不行? open-traa/traa traa is a versatile project aimed at recording anything, anywhere. The primary focus is to provide robust solutions for various recording scenarios, making it a highly adaptable tool…

国标GB28181视频平台EasyCVR私有化部署视频平台对接监控录像机NVR时,录像机“资源不足”是什么原因?

EasyCVR视频融合云平台,是TSINGSEE青犀视频“云边端”架构体系中的“云平台”系列之一,是一款针对大中型项目设计的跨区域、网络化、视频监控综合管理系统平台,通过接入视频监控设备及视频平台,实现视频数据的集中汇聚、融合管理、…

ENSP OSPF和BGP引入

路由协议分为:内部网关协议和外部网关协议。内部网关协议用于自治系统内部的路由,包括:RIP和OSPF。外部网关协议用于自治系统之间的路由,包括BGP。内部网关协议和外部网关协议配合来共同完成网络的路由。 BGP:边界网关路由协议(b…

template和span标签的使用

一&#xff1a;template template是模板占位符&#xff0c;可帮助我们包裹元素&#xff0c;而且循环过程当中&#xff0c;template不会被渲染到页面。 <div>ABC</div> <template v-for"(item, index) in 5"><div>{{ index }}</div>&…

备战软考Day05-数据库系统基础知识

一、基本概念 1.数据库 数据库(Database&#xff0c;缩写为DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储&#xff0c;具有较小的冗余度、较高的数据独立性和易扩展性&#xff0c;并可为各种用户共享。 2.数据…

Odoo:免费开源的钢铁冶金行业ERP管理系统

文 / 开源智造 Odoo亚太金牌服务 简介 Odoo免费开源ERP集成计质量设备大宗原料采购&#xff0c;备件设材全生命周期&#xff0c;多业务模式货控销售&#xff0c;全要素追溯单品&#xff0c;无人值守计量物流&#xff0c;大宗贸易交易和精细化成本管理等方案&#xff1b;覆盖…

[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue3校园宿舍管理系统(优质版)&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…

Oracle的字符串函数

Oracle Ascii()函数 在Oracle中&#xff0c;Ascii()函数可以返回代表指定字符的数字值代码&#xff0c;那么Ascii()函数具体该如何实用呢&#xff1f; Ascii()函数语法 ASCII( single_character )参数 single_character&#xff1a;指定的字符来检索NUMBER代码。 如果输入多…

cesium 3DTiles之pnts格式详解

Point Cloud 1 概述 点云&#xff08;Point Cloud&#xff09;瓦片格式用于高效流式传输大规模点云数据&#xff0c;常用于 3D 可视化中。每个点由位置&#xff08;Position&#xff09;和可选的属性定义&#xff0c;这些属性用来描述点的外观&#xff08;如颜色、法线等&…

记录一次非常奇怪的MIME type of “text/html“报错

报错现象 访问指定地址&#xff0c;一直转圈打不开&#xff0c;打开游览器控制台发现有如下报错&#xff1a; Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “text/html”. Strict MIME type checking i…

git新手使用教程

git新手使用教程 一、安装和初始化配置2、新建仓库3.工作区域和文件状态4.添加和提交文件5 git reset回退版本6 使用git diff查看差异7 使用git rm删除文件8 .gitignore忽略文件9 注册GitHub账号10 SSH配置和克隆仓库11 关联本地仓库和远程仓库12 Gitee的使用 由B站视频教程整理…

《TCP/IP网络编程》学习笔记 | Chapter 10:多进程服务器端

《TCP/IP网络编程》学习笔记 | Chapter 10&#xff1a;多进程服务器端 《TCP/IP网络编程》学习笔记 | Chapter 10&#xff1a;多进程服务器端进程概念及应用并发服务端的实现方法理解进程进程ID通过调用 fork 函数创建进程 进程和僵尸进程僵尸进程产生僵尸进程的原因销毁僵尸进…

推荐一款DBF文件查看器:DBF Viewer 2000

DBF Viewer 2000是一款强大、简洁且易于使用的 DBF(Clipper、dBase、FoxBase、Foxpro、Visual Foxpro、Visual DBase、VO、DB2K)文件浏览器和编辑器。 软件特点&#xff1a; - 能够快速、有效地浏览和编辑各种类型的 DBF 文件。 - 支持多种文件格式&#xff0c;包括 dBase、V…

基于构件的软件开发、软件维护、区块链技术及湖仓一体架构的应用

目录 试题一 论基于构件的软件开发方法及其应用 试题二 论软件维护方法及其应用 试题三 论区块链技术及应用 试题四 论湖仓一体架构及其应用 相关推荐 试题一 论基于构件的软件开发方法及其应用 基于构件的软件开发(Component-Based Software Development&#xff0c;CBSD…

SCRFD算法解读及环境安装实践

论文地址&#xff1a;https://arxiv.org/abs/2105.04714&#xff0c;accepted by ICLR-2022 工程地址&#xff1a;https://github.com/deepinsight/insightface/tree/master/detection/scrfd 下一篇博客&#xff0c;如何用SCRFD训练自己的数据 文章目录 1、算法解读2、环境安装…