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

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

给你一个长度为 n 的整数数组 nums 和一个  整数 k 。

一个 

子序列

 的 能量 定义为子序列中 任意 两个元素的差值绝对值的 最小值 。

请你返回 nums 中长度 等于 k 的 所有 子序列的 能量和 。

由于答案可能会很大,将答案对 109 + 7 取余 后返回。

示例 1:

输入:nums = [1,2,3,4], k = 3

输出:4

解释:

nums 中总共有 4 个长度为 3 的子序列:[1,2,3] ,[1,3,4] ,[1,2,4] 和 [2,3,4] 。能量和为 |2 - 3| + |3 - 4| + |2 - 1| + |3 - 4| = 4 。

示例 2:

输入:nums = [2,2], k = 2

输出:0

解释:

nums 中唯一一个长度为 2 的子序列是 [2,2] 。能量和为 |2 - 2| = 0 。

示例 3:

输入:nums = [4,3,-1], k = 2

输出:10

解释:

nums 总共有 3 个长度为 2 的子序列:[4,3] ,[4,-1] 和 [3,-1] 。能量和为 |4 - 3| + |4 - (-1)| + |3 - (-1)| = 10 。

提示:

 ·2 <= n == nums.length <= 50

 ·-108 <= nums[i] <= 108

 ·2 <= k <= n

题目大意:计算所有长度为k的子序列的能量和。

分析:

(1)对nums数组排序后,子序列的能量一定由子序列中相邻元素的差值产生;

(2)由(1)可设三维数组dp,dp[i][len][energy]维护以i号元素结尾、长度为k且能量为energy的序列个数。计算dp[i][len]中的值时,可遍历dp[j][len-1][energy](其中0<=j<i,0<=energy<=MAX_INT),则当energy<abs(nums[i]-nums[j])时,dp[i][len][energy]+=dp[j][len-1][energy],当energy>=abs(nums[i]-nums[j])时,dp[i][len][abs(nums[i]-nums[j])]+=dp[j][len-1][energy];

(3)由于energy不可能取到0到MAX_INT所有的值,因此可以用哈希表减少dp数组的存储大小。

class Solution {
public:int sumOfPowers(vector<int>& nums, int k) {int N=nums.size(),mod=1000000007,ans=0;vector<vector<unordered_map<int,int>>> dp(N,vector<unordered_map<int,int>>(k+1));sort(nums.begin(),nums.end());for(int i=0,dis;i<N;++i){dp[i][1][INT_MAX]=1;for(int j=0;j<i;++j){dis=abs(nums[i]-nums[j]);for(int len=2;len<=k;++len){for(const auto& [energy,count]:dp[j][len-1]){int& sum=dp[i][len][min(dis,energy)];sum=(sum+count)%mod;}}}for(const auto&[energy,count]:dp[i][k]) ans=(ans+(long long)energy*count%mod)%mod;}return ans;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 农业农村大数据底座:实现智慧农业的关键功能
  • TQSDRPI开发板教程:实现PL端的UDP回环与GPSDO
  • 从零训练一个多模态LLM:预训练+指令微调+对齐+融合多模态+链接外部系统
  • Android车载MCU控制音量和ARM控制音量的区别和优缺点—TEF6686 FM/AM芯片
  • HTTPS 的加密过程 详解
  • 【NLP】提升文本生成多样性的实用方法
  • c++ 高精度加法(只支持正整数)
  • FPGA:频闪灯设计
  • 大厂面试-基本功
  • 【LLM】-05-提示工程-部署Langchain-Chat
  • 如何理解React State不可变性的原则
  • 计算机网络发展历史
  • matlab永磁同步电机反馈试验装置的设计和永磁同步电机仿真
  • 【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS
  • TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
  • isset在php5.6-和php7.0+的一些差异
  • Java|序列化异常StreamCorruptedException的解决方法
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS字符串转数字方法总结
  • Map集合、散列表、红黑树介绍
  • Node + FFmpeg 实现Canvas动画导出视频
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • scala基础语法(二)
  • windows下mongoDB的环境配置
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端学习笔记之观察者模式
  • 微信小程序开发问题汇总
  • 小程序测试方案初探
  • 用jquery写贪吃蛇
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 函数计算新功能-----支持C#函数
  • ​520就是要宠粉,你的心头书我买单
  • ​你们这样子,耽误我的工作进度怎么办?
  • #include到底该写在哪
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • (02)Unity使用在线AI大模型(调用Python)
  • (13)Hive调优——动态分区导致的小文件问题
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (八)Flask之app.route装饰器函数的参数
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (第二周)效能测试
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (三)mysql_MYSQL(三)
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET BackgroundWorker
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Framework杂记
  • .net wcf memory gates checking failed
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 后台导出excel ,word
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 直连SAP HANA数据库
  • .NET/C# 项目如何优雅地设置条件编译符号?