Leetcode 3098. Find the Sum of Subsequence Powers

  • Leetcode 3098. Find the Sum of Subsequence Powers
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3098. Find the Sum of Subsequence Powers

1. 解题思路

这一题思路上的话还是比较直接的,由于我们只需要求出每一个可能的power值,然后求出对应的power值下所有可能的长度为k的序列的总数,将两者相乘之后求和即可得到我们最终的答案。

其中,对于所有可能的power值得获取是一个简单的操作,我们只需要将数组进行一个二重遍历即可获得所有的可能power得值。

然后,剩下的问题就变成了如何求某个确定的power值 p p p下长度为 k k k的序列的个数了,这个问题还是比较复杂的,但是我们可以将其进行一下转化,变为:

  • 求长度为 k k k,且power值不小于 p p p的序列的个数。

此时,由于我们已知所有的power值得可能性,因此,power恰好为 p p p的序列个数 f ( p ) f(p) f(p)就是上述结果减去 f ( q ) f(q) f(q),其中, q q q为可取到的第一个比 p p p大的power值。

因此,我们只需要完成长度为 k k k,且power值不小于 p p p的序列的个数的求取即可,而这个问题我们将数列排序之后通过动态规划即可实现。

2. 代码实现

给出python代码实现如下:

MOD = 10**9+7class Solution:def sumOfPowers(self, nums: List[int], k: int) -> int:n = len(nums)nums = sorted(nums)delta = set()for i in range(n-1):for j in range(i+1, n):delta.add(nums[j]-nums[i])delta = sorted(delta, reverse=True)@lru_cache(None)def dp(idx, md, k, pre):if k == 0:return 1if n-idx < k:return 0if pre is not None and nums[idx] - pre < md:return dp(idx+1, md, k, pre) % MODelse:return (dp(idx+1, md, k, pre) + dp(idx+1, md, k-1, nums[idx])) % MODans = 0s = 0for d in delta:cnt = dp(0, d, k, None)ans = (ans + d * (cnt-s)) % MODs = cntreturn ans             

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

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

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

相关文章

GitHub常用命令

GitHub常用命令 远程仓库相关命令拉取项目到本地拉取远程仓库推送远程仓库 分支操作相关命令查看所有本地分支查看所有远程分支查看所有本地分支和远程分支切换分支创建本地分支创建远程分支(本地分支push到远程)创建新分支并切换到新分支合并指定分支到当前分支删除分支 代码提…

基于 FFmpeg 和 SDL 的音视频同步播放器

基于 FFmpeg 和 SDL 的音视频同步播放器 基于 FFmpeg 和 SDL 的音视频同步播放器前置知识音视频同步简介复习DTS、PTS和时间基 程序框架主线程解复用线程音频解码播放线程视频解码播放线程 音视频同步逻辑源程序结果工程文件下载参考链接 基于 FFmpeg 和 SDL 的音视频同步播放器…

蓝桥杯备考随手记: Math 类中常用方法

Java的Math类是一个包含数学操作方法的实用工具类。它提供了许多用于执行各种数学计算的静态方法。 下面是Math类中一些常用的方法&#xff1a; abs()&#xff1a;返回参数的绝对值。 int absoluteValue Math.abs(-10); System.out.println(absoluteValue); // Output: 10 c…

EtherCAT主站SOEM -- 25 -- STM32F767-SOEM通过 PV模式(速度模式)控制一个电机转圈圈

EtherCAT主站SOEM -- 25 -- STM32F767-SOEM通过 PV模式(速度模式)控制一个电机转圈圈 0 QT-SOEM视频预览及源代码下载:0.1 QT-SOEM视频预览0.2 QT-SOEM源代码下载0.3 STM32F7-SOEM视频预览0.4 STM32F7-SOEM源代码下载1 程序文件修改替换1.1 allvalue.h1.2 allvalue.c1.3 mot…

BaseDao入门使用

目录 一、什么是BaseDao?BaseDao的优点&#xff1a;BaseDao用来做什么操作&#xff1f; 二、BaseDao封装增删改查 案例演示&#xff1a;1、java与数据库进行连接2、连接后可对其进行操作&#xff08;增、删、改&#xff09;返回影响行数3、查询 查询一个字段&#xff08;返回一…

python基础练习题6

1、找出10000以内能被5或6整除&#xff0c;但不能被两者同时整除的数&#xff08;函数&#xff09; def find_numbers(m,n):result []for num in range(m,n):if (num % 5 0 or num % 6 0) and not (num % 5 0 and num % 6 0):result.append(num)return resultprint(find_…

Linux: 进程优先级

Linux: 进程优先级 一、进程优先级概念二、如何查看进程优先级三、如何修改进程的优先级&#xff08;PRL vs NI&#xff09;四、为何优先级PRL必须限定范围五、进程其他特性 一、进程优先级概念 优先级的本质就是排队&#xff0c;而排队则是资源不足所引起的。在计算机中&#…

static修饰的方法为什么不能被覆盖?

在Java中&#xff0c;static方法不能被覆盖&#xff08;overridden&#xff09;的根本原理可以从以下几个角度进行解释&#xff1a; 静态绑定与动态绑定&#xff1a; 非静态方法&#xff08;非static方法&#xff09;的调用遵循动态绑定原则&#xff0c;即在运行时根据对象的实…

分布式系统概述(重要关键词加粗)

学习目标&#xff1a; 了解分布式 学习内容&#xff1a; 分布式系统是由多个计算机节点组成的系统&#xff0c;这些节点通过网络相互连接并协同工作&#xff0c;以完成共同的任务或服务。在分布式系统中&#xff0c;每个节点都运行着一部分应用程序&#xff0c;并且通常拥有自…

Leetcode 3100. Water Bottles II

Leetcode 3100. Water Bottles II 1. 解题思路2. 代码实现 题目链接&#xff1a;3100. Water Bottles II 1. 解题思路 这一题就是按照题目翻译一下&#xff0c;按照题中给出的规则不断进行bottle的兑换&#xff0c;直至无法兑换为止&#xff0c;即可得到最终的答案。 2. 代…

【3.31】

智乃想考一道完全背包(Easy version) 思路&#xff1a;虚拟物品的思路。可以把 l ∈ [ 1 , k ] , r ∈ [ k , n ] l\in[1, k], r\in[k, n] l∈[1,k],r∈[k,n] 的区间 ( l , r ) (l, r) (l,r) 看作一个虚拟物品&#xff0c;体积和价值为区间的体积和与价值和。这样做完全背包…

【项目技术介绍篇】若依开源项目RuoYi-Cloud前端技术介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

鸿蒙ARKTS--简易的购物网站

目录 一、media 二、string.json文件 三、pages 3.1 登录页面&#xff1a;gouwuPage.ets 3.2 PageResource.ets 3.3 商品页面&#xff1a;shangpinPage.ets 3.4 我的页面&#xff1a;wodePage.ets 3.5 注册页面&#xff1a;zhucePage.ets 3. 购物网站主页面&#xff…

STM32学习笔记(10_2)- I2C通信协议MPU6050简介

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

[Linux_IMX6ULL驱动开发]-基础驱动

驱动的含义 如何理解嵌入式的驱动呢&#xff0c;我个人认为&#xff0c;驱动就是嵌入式上层应用操控底层硬件的桥梁。因为上层应用是在用户态&#xff0c;是无法直接操控底层的硬件的。我们需要利用系统调用&#xff08;open、read、write等&#xff09;&#xff0c;进入内核态…

synchronized的使用方式

1、修饰实例方法 public synchronized void A(){} 这个时候锁的是当前的实例对象。多线程操作同一个实例的实例方法时&#xff0c;才会阻塞。 2、修饰静态方法 public synchronized static void A(){}这个时候锁的是整个类下所有的实例对象&#xff0c;静态方法是存在于方法…

自然语言处理:大模型LLM论文整理

LLMs 九层妖塔 地址&#xff1a;https://github.com/km1994/LLMsNineStoryDemonTower LLMs 千面郎君 地址&#xff1a;https://github.com/km1994/LLMs_interview_notes LLMs 论文学习笔记&#xff1a;https://gitee.com/km601/llms_paper NLP 百面百搭 地址&#xff1a;htt…

os模块篇(三)

文章目录 os.putenv(key, value, /)os.setegid(egid, /)os.seteuid(euid, /)os.setgid(gid, /)os.setgroups(groups, /)os.setns(fd, nstype0)os.setpgrp()os.setpgid(pid, pgrp, /)os.setpriority(which, who, priority) os.putenv(key, value, /) os.putenv(key, value) 是 …

看懂Spring和Spring Boot的区别与联系

一、概述 Spring和Spring Boot是Java应用程序开发中最受欢迎的框架之一。Spring提供了一个全功能的、开放式源代码的Java应用程序框架&#xff0c;可以帮助开发人员在基于Java的代码中快速编写而不必关心底层技术实现。而Spring Boot则是基于Spring框架之上的快速开发框架&…

Java编程实战:疫情物资分配系统的设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…