leetcode3098. 求出所有子序列的能量和


官解

class Solution(object):# 定义常量mod = int(1e9 + 7)  # 模数,用于防止结果溢出inf = float('inf')  # 无穷大,用于初始化时的特殊值def sumOfPowers(self, nums, k):n = len(nums)  # 数组长度res = 0  # 用于存储最终结果# 三维动态规划表,d[i][p][v] 表示以 nums[i] 结尾的长度为 p 的子序列,最小绝对差为 v 的频次d = [[defaultdict(int) for _ in range(k + 1)] for _ in range(n)]nums.sort()  # 对 nums 进行排序,确保子序列的顺序for i in range(n):# 初始化:长度为 1 的子序列,最小绝对差为无穷大,频次为 1d[i][1][self.inf] = 1for j in range(i):# 计算 nums[i] 和 nums[j] 之间的绝对差diff = abs(nums[i] - nums[j])# 更新长度为 p 的子序列的最小绝对差,其中 p 从 2 到 kfor p in range(2, k + 1):for v, cnt in d[j][p - 1].items():# 更新 d[i][p][min(diff, v)]d[i][p][min(diff, v)] = (d[i][p][min(diff, v)] + cnt) % self.mod# 计算结果:遍历所有以 nums[i] 结尾的长度为 k 的子序列for v, cnt in d[i][k].items():# 累加 v * cnt 到 res 中,并取模res = (res + v * cnt % self.mod) % self.modreturn res  # 返回最终结果

Chatgpt解

这段代码实现了一个名为sumOfPowers的方法,它的目标是计算给定数组 nums 中所有长度为 k 的子序列的最小绝对差的和,并将结果对 1e9 + 7 取模。

代码分解与解释

变量和数据结构
  • mod = int(1e9 + 7): 模数,用于防止结果溢出。
  • inf = float('inf'): 表示无穷大,用于初始化时的特殊值。
  • d = [[defaultdict(int) for _ in range(k + 1)] for _ in range(n)]: 三维动态规划表,用于存储子序列的最小绝对差。
    • d[i][p] 表示以 nums[i] 结尾的长度为 p 的子序列,其最小绝对差的频次。
    • d[i][p][v] 表示上述子序列中,最小绝对差为 v 的子序列数量。
算法步骤
  1. 初始化:

    • n = len(nums): 数组 nums 的长度。
    • res = 0: 用于存储最终结果。
    • nums.sort(): 对 nums 进行排序,确保子序列的顺序。
    • 初始化 d[i][1][inf] = 1,表示长度为 1 的子序列,最小绝对差为无穷大。
  2. 动态规划填表:

    • 遍历数组的每一个元素 nums[i]:
      • 对于每一个之前的元素 nums[j] (其中 j < i):
        • 计算 nums[i]nums[j] 之间的绝对差 diff
        • 更新长度为 p 的子序列的最小绝对差,其中 p 从 2 到 k:
          • 对于 d[j][p-1] 中的每个 vcnt:
            • 更新 d[i][p][min(diff, v)],其中 v 是子序列的最小绝对差,cnt 是其出现的频次。
            • 使用 min(diff, v) 确保当前子序列的最小绝对差。
  3. 计算结果:

    • 遍历所有以 nums[i] 结尾的长度为 k 的子序列:
      • 对于每个最小绝对差 v 和其出现的频次 cnt:
        • 累加 v * cntres 中,并取模。
返回结果
  • 返回 res,即所有长度为 k 的子序列的最小绝对差的和,并对 1e9 + 7 取模。

代码的关键点

  • 使用三维动态规划表 d 来存储子序列信息。
  • 确保子序列按照递增顺序进行计算,避免重复计算。
  • 通过 min(diff, v) 保持子序列的最小绝对差。

总结

这段代码通过动态规划的方法有效地计算了所有长度为 k 的子序列的最小绝对差,并利用模数 1e9 + 7 处理可能出现的大数溢出问题。代码的核心思想是利用前缀子序列的信息来逐步构建长度为 k 的子序列,并在构建过程中不断更新最小绝对差。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24.7.17数据结构|顺序表

目录 大O的工程意义&#xff1f; 线性表 引入&#xff1a; 主要掌握【代码实现】&#xff1a; 一、线性结构 1、逻辑描述 2、顺序表 1、如何定义结构 1&#xff09;静态顺序表 1&#xff09;动态顺序表 2、写代码 &#xff08;1&#xff09;【clion创建工程】 ​编…

【数据结构】详解二叉树及其操作

无论你觉得自己多么的了不起&#xff0c;也永远有人比你更强。&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;二叉树的遍历 • &#x1f330;1.创建一棵二叉树 • &#x1f330;2.二叉树的遍历 •&#x1f525;前序遍历 •&a…

Apache DolphinScheduler 3.2.2 版本正式发布!

Apache DolphinScheduler 3.2.2 版本正式发布&#xff01; 近日&#xff0c;Apache DolphinScheduler 发布了 3.2.2 版本。此版本主要基于 3.2.1 版本进行了 bug 修复&#xff0c;新增若干特性&#xff0c;并进行了众多改进和 Bug 修复&#xff0c;以及文档修复等。 &#x1…

【前端 08】简单学习js字符串

JavaScript中的String对象详解 在JavaScript中&#xff0c;字符串&#xff08;String&#xff09;是一种非常基础且常用的数据类型&#xff0c;用于表示文本数据。虽然JavaScript中的字符串是原始数据类型&#xff0c;但它们的行为类似于对象&#xff0c;因为JavaScript为字符…

谷粒商城实战笔记-52~53-商品服务-API-三级分类-新增-修改

文章目录 一&#xff0c;52-商品服务-API-三级分类-新增-新增效果完成1&#xff0c;点击Append按钮&#xff0c;显示弹窗2&#xff0c;测试完整代码 二&#xff0c;53-商品服务-API-三级分类-修改-修改效果完成1&#xff0c;添加Edit按钮并绑定事件2&#xff0c;修改弹窗确定按…

vue3-print-nb实现打印pdf分页

安装插件 npm install vue3-print-nb --savevue3 引入 import print from vue3-print-nb // 打印插件 app.use(print)使用 这里使用的是对象配置方式 对象配置方式——在js中定义一个对象&#xff0c;对象中可配置打印区域相关属性&#xff0c;在需要打印的单据内容最外面的…

【Django】在vscode中新建Django应用并新增路由

文章目录 打开一个终端输入新建app命令在app下的views.py内写一个视图app路由引入该视图项目路由引入app路由项目(settings.py)引入app&#xff08;AntappConfig配置类&#xff09;运行项目 打开一个终端 输入新建app命令 python manage.py startapp antapp在app下的views.py内…

MySQL第一阶段:多表查询、事务

继续我的MySQL之旅&#xff0c;继续上篇的DDL、DML、DQL、以及一些约束&#xff0c;该到了多表查询和事务的学习总结&#xff0c;以及相关的案例实现&#xff0c;为未来的复习以及深入的理解做好知识储备。 目录 多表查询 连接查询 内连接 外连接 子查询 事务 事务简介…

为什么用LeSS?

实现适应性 LeSS是一个产品开发的组织系统&#xff0c;旨在最大化一个组织的适应性。关于适应性&#xff08;或者敏捷性&#xff0c;也就是敏捷开发的初衷&#xff09;我们是指优化&#xff1a; 以相对低的成本改变方向的能力&#xff0c;主要是基于通过频繁交付产生的探索。从…

pyuic5将ui文件转换为py文件报错:one input ui-file must be specified;no element found;

ERROR 1 文件命名不规范Solution 1:文件命名不能有空格 ERROR 2未选中ui文件 Solution 2:选中要转换成py 的文件

writing classes ... [xxx of xxxx] 执行时间太长

一、问题展示 二、解决方法 打开设置【File - Settings…】修改堆大小

使用vfbox网关实现modbus opc profinet iec61850等协议间的转换

在当今物联网&#xff08;IoT&#xff09;与工业自动化日益融合的时代背景下&#xff0c;协议转换网关作为连接不同设备与系统之间的桥梁&#xff0c;扮演着至关重要的角色。VFBox协议转换网关&#xff0c;作为这一领域内的佼佼者&#xff0c;以其高效、灵活、可靠的性能&#…

鸿蒙APP架构及开发入门

1.鸿蒙系统 1.1 什么是鸿蒙 鸿蒙是一款面向万物互联时代的、全新的分布式操作系统。 在传统的单设备系统能力基础上&#xff0c;鸿蒙提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、…

从代码层面熟悉UniAD,开始学习了解端到端整体架构

0. 简介 最近端到端已经是越来越火了&#xff0c;以UniAD为代表的很多工作不断地在不断刷新端到端的指标&#xff0c;比如最近SparseDrive又重新刷新了所有任务的指标。在端到端火热起来之前&#xff0c;成熟的模块化自动驾驶系统被分解为不同的独立任务&#xff0c;例如感知、…

【Django】网上蛋糕商城后台-商品管理

1.商品管理功能 当管理员点击商品管理时&#xff0c;发送服务器请求 path(admin/goods_list/, viewsAdmin.goods_list), # 处理商品列表请求 def goods_list(request):try:type request.GET["type"]except:type 0try:ym request.GET["ym"]except:ym …

基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)

基于微信小程序SpringBootVue的刷题系统(带1w文档) 基于微信小程序SpringBootVue的刷题系统(带1w文档) 本系统是将网络技术和现代的管理理念相结合&#xff0c;根据试题信息的特点进行重新分配、整合形成动态的、分类明确的信息资源&#xff0c;实现了刷题的自动化&#xff0c;…

Springboot 多数据源事务

起因 在一个service方法上使用的事务,其中有方法是调用的多数据源orderDB 但是多数据源没有生效,而是使用的primaryDB 原因 spring 事务实现的方式 以 Transactional 注解为例 (也可以看 TransactionTemplate&#xff0c; 这个流程更简单一点)。 入口&#xff1a;ProxyTransa…

电商项目之如何判断线程池是否执行完所有任务

文章目录 1 问题背景2 前言3 4种常用的方法4 代码4.1 isTerminated()4.2 线程池的任务总数是否等于已执行的任务数4.3 CountDownLatch计数器4.4 CyclicBarrier计数器 1 问题背景 真实生产环境的电商项目&#xff0c;常使用线程池应用于执行大批量操作达到高性能的效果。应用场景…

基于Python的房产数据分析系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录&#xff1a; 目录 详细视频演示 设计文档详细参考 技术开发的参考技术栈&#xff01; 2.1 Python语言 2.2 Django框架 2.3 MySQL 2.4 Hadoop介绍 2.5 Scrapy介绍 4.2 系统结构设计 4.3 数据库设计 界面设计与功能实现 5.1系统登录注册实现 5.2管理员模块…

[Meachines] [Easy] Admirer Adminer远程Mysql反向+Python三方库函数劫持权限提升

信息收集 IP AddressOpening Ports10.10.10.187TCP:21,22,80 $ nmap -p- 10.10.10.187 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u7 (protocol 2.0) | ssh-hostkey: | …