【LeetCode 算法】Power of Heroes 英雄的力量
文章目录
- Power of Heroes 英雄的力量
- 问题描述:
- 分析
- 代码
- Tag
Power of Heroes 英雄的力量
问题描述:
给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的 力量 定义为:
i 0 , i 1 , . . . i k i_0 ,i_1 ,... i_k i0,i1,...ik 表示这组英雄在数组中的下标。那么这组英雄的力量为 m a x ( n u m s [ i 0 ] , n u m s [ i 1 ] . . . n u m s [ i k ] ) 2 ∗ m i n ( n u m s [ i 0 ] , n u m s [ i 1 ] . . . n u m s [ i k ] ) max(nums[i_0],nums[i_1] ... nums[i_k])2 * mi_n(nums[i_0],nums[i_1] ... nums[i_k]) max(nums[i0],nums[i1]...nums[ik])2∗min(nums[i0],nums[i1]...nums[ik]) 。
请你返回所有可能的 非空 英雄组的 力量 之和。由于答案可能非常大,请你将结果对 10^9 + 7 取余。
1 < = n u m s . l e n g t h < = 1 0 5 1 < = n u m s [ i ] < = 1 0 9 1 <= nums.length <= 10^5\\ 1 <= nums[i] <= 10^9 1<=nums.length<=1051<=nums[i]<=109
分析
一次周赛的hard,当时没时间做。
一开始没看清问题的意思,以为要计算子数组,而实际上是要求子集。
子集也可以认为是原数组的一个子序列,虽然这个说法不是很严谨。
假如有一个子序列,这个子序列的 p o w e r power power就是 m a x ∗ m a x ∗ m i n max*max*min max∗max∗min.
暴力
如果是使用暴力的方式,就是枚举所有的子序列然后对每个子序列进行找 m a x , m i n max,min max,min。
以当前数组的规模,可能有 2 100000 2^{100000} 2100000个子序列,很明显这样不可能,即使可以枚举出所有的子序列,在计算power的过程中的时间复杂度也是 O ( L ) O(L) O(L),和子序列的长度有关。
既然是找最大和最小,那就先排序,从小到大。因为是找子序列,所以排个序,不会影响最终结果。
假设区间 [ j , i ] , i > j [j,i],i>j [j,i],i>j,那么必然 a [ i ] > = a [ j ] a[i]>=a[j] a[i]>=a[j],此时以 a [ i ] a[i] a[i]为最大的子序列,就可以计算出来,即 2 i 2^i 2i个,从左向右计算:
- a [ 0 ] a[0] a[0]为 m i n min min时,可以与 a [ i ] a[i] a[i]构造的序列数量为 2 i − 1 2^{i-1} 2i−1,它们可以为最终的ans提供 a [ 0 ] ∗ a [ i ] ∗ 2 i − 1 a[0]*a[i]*2^{i-1} a[0]∗a[i]∗2i−1.
同理可以计算得到
- a [ 1 ] ∗ a [ i ] ∗ 2 i − 2 a[1]*a[i]*2^{i-2} a[1]∗a[i]∗2i−2.
- a [ 2 ] ∗ a [ i ] ∗ 2 i − 3 a[2]*a[i]*2^{i-3} a[2]∗a[i]∗2i−3.
- a [ 3 ] ∗ a [ i ] ∗ 2 i − 4 a[3]*a[i]*2^{i-4} a[3]∗a[i]∗2i−4.
… - a [ i − 2 ] ∗ a [ i ] ∗ 2 i − 1 − i + 2 a[i-2]*a[i]*2^{i-1-i+2} a[i−2]∗a[i]∗2i−1−i+2
- a [ i − 1 ] ∗ a [ i ] ∗ 2 i − 1 − i + 1 a[i-1]*a[i]*2^{i-1-i+1} a[i−1]∗a[i]∗2i−1−i+1
最后还要补一个 a [ i ] 3 a[i]^3 a[i]3,单个的也要算。
到此以a[i]为最大的所有子序列的power都可以计算出。
p [ i ] = a [ i ] 3 + a [ 0 ] ∗ a [ i ] ∗ 2 i − 1 + a [ 1 ] ∗ a [ i ] ∗ 2 i − 2 + . . + a [ i − 1 ] ∗ a [ i ] ∗ 2 i − 1 − i + 1 p [ i ] = a [ i ] ∗ ( a [ i ] 2 + a [ 0 ] ∗ 2 i − 1 + a [ 1 ] ∗ 2 i − 2 + . . + a [ i − 1 ] ∗ 2 i − 1 − i + 1 ) p[i] = a[i]^3 +a[0]*a[i]*2^{i-1} + a[1]*a[i]*2^{i-2} +.. + a[i-1]*a[i]*2^{i-1-i+1}\\ p[i] = a[i]*( a[i]^2 + a[0]*2^{i-1}+ a[1]*2^{i-2} + ..+ a[i-1]*2^{i-1-i+1}) p[i]=a[i]3+a[0]∗a[i]∗2i−1+a[1]∗a[i]∗2i−2+..+a[i−1]∗a[i]∗2i−1−i+1p[i]=a[i]∗(a[i]2+a[0]∗2i−1+a[1]∗2i−2+..+a[i−1]∗2i−1−i+1)
如果此时让k = i+1,即右移一位
p [ k ] = a [ k ] ∗ ( a [ k ] 2 + a [ 0 ] ∗ 2 i − 1 ∗ 2 + a [ 1 ] ∗ 2 i − 2 ∗ 2 + . . + a [ i − 1 ] ∗ 2 i − 1 − i + 1 ∗ 2 + a [ i ] ) p[k] = a[k]*( a[k]^2 + a[0]*2^{i-1}*2+ a[1]*2^{i-2}*2 + ..+ a[i-1]*2^{i-1-i+1}*2 + a[i])\\ p[k]=a[k]∗(a[k]2+a[0]∗2i−1∗2+a[1]∗2i−2∗2+..+a[i−1]∗2i−1−i+1∗2+a[i])
由于右端点的移动,新增了1位a[k],导致一部分同时乘2。
假设计算下标 i i i时 令 S i = a [ 0 ] ∗ 2 i − 1 + a [ 1 ] ∗ 2 i − 2 + . . + a [ i − 1 ] ∗ 2 i − 1 − i + 1 S_i = a[0]*2^{i-1}+ a[1]*2^{i-2} + ..+ a[i-1]*2^{i-1-i+1} Si=a[0]∗2i−1+a[1]∗2i−2+..+a[i−1]∗2i−1−i+1
那么 p [ i ] = a [ i ] ∗ ( a [ i ] 2 + S i ) p[i] = a[i]*( a[i]^2 + S_i) p[i]=a[i]∗(a[i]2+Si)
而当计算下标 k k k时,不需要重复计算 这一部分S,而是可以通过前一个i的S,来计算出当前所需要的 S k S_k Sk。
S k = 2 ∗ S i + a [ i − 1 ] S_k= 2*S_i + a[i-1] Sk=2∗Si+a[i−1]
p [ k ] = a [ k ] ∗ ( a [ k ] 2 + S k ) ; p[k] = a[k]*( a[k]^2 + S_k); p[k]=a[k]∗(a[k]2+Sk);
计算过程中还需要注意取余
代码
Math
class Solution {long MOD = (long)1e9+7;public int sumOfPower(int[] nums) { Arrays.sort(nums);long sum = 0,s = 0;int n = nums.length; for(int i=0;i<n;i++){long cur = ((long)nums[i])%MOD;long pow = (cur*cur)%MOD; sum = (sum + (pow*((cur +s)%MOD))%MOD)%MOD;s = ( 2*s + cur)%MOD; }return (int)sum;}
}
时间复杂度 O ( N L o g N ) O(NLogN) O(NLogN)
空间复杂度 O ( L o g N ) O(LogN) O(LogN)
Tag
Array
Math
Sort
相关文章:
【LeetCode 算法】Power of Heroes 英雄的力量
文章目录 Power of Heroes 英雄的力量问题描述:分析代码Math Tag Power of Heroes 英雄的力量 问题描述: 给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的 力量 定义为ÿ…...
合宙Air724UG LuatOS-Air script lib API--ntp
ntp Table of Contents ntp ntp.timeSync(period, fnc, fun) ntp 模块功能:网络授时. 重要提醒!!!!!! 本功能模块采用多个免费公共的NTP服务器来同步时间 并不能保证任何时间任何地点都能百分…...

LangChain+ChatGLM大模型应用落地实践(一)
LLMs的落地框架(LangChain),给LLMs套上一层盔甲,快速构建自己的新一代人工智能产品。 一、简介二、LangChain源码三、租用云服务器实例四、部署实例 一、简介 LangChain是一个近期非常活跃的开源代码库,目前也还在快速…...

PSO粒子群优化算法
PSO粒子群优化算法 算法思想matlab代码python代码 算法思想 粒子群算法(Particle Swarm Optimization) 优点: 1)原理比较简单,实现容易,参数少。 缺点: 1)易早熟收敛至局部最优、迭代后期收敛速度慢的…...

记一次 .NET某医疗器械清洗系统 卡死分析
一:背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧。 二:WinDbg 分析 1. 为什么会卡死 因为是窗体程序,理所当然就是看主…...
C# 基于Rijndael对文件进行加解密
介绍: Rijndael 是一种对称加密算法,也是 AES(Advanced Encryption Standard)的前身。它用于数据的加密和解密,并提供了安全且高效的加密功能。 在.NET Framework 中,Rijndael 类是一个实现了 Rijndael 算法…...

Elasticsearchr入门
首先在官网下载elasticsearch8.9版本,以及8.9版本的kibana。 解压,点击es8.9bin目录下的elasticsearch.bat文件启动es 如图所示即为成功。 启动之后打开idea,添加依赖 <dependency><groupId>com.fasterxml.jackson.core</g…...
【ARM】imx6ul移植kernel记录,恩智浦github提供的最新kernel(2023年7月31)
❤️作者主页:凉开水白菜 ❤️作者简介:共同学习,互相监督,热于分享,多加讨论,一起进步! ❤️专栏目录: ❤️专栏资料: ❤️点赞 👍 收藏 ⭐再看,养成习惯 订阅的粉丝可通过PC端文末加我微信,可对文章的内容进行一对一答疑! 文章目录 一、简介二、源码下载三、官方…...

eeglab(自用)
目录 1.加载、显示数据 2.绘制脑电头皮图 3.绘制通道光谱图 4.预处理工具 5.ICA去除伪迹 5. 提取数据epoch 1.加载、显示数据 观察事件值(Event values):该数据集中包含2400个事件,每个事件指定了EEG.event结构的字段Type(类型)、position(位置)和…...

Dockerfile构建Tomcat镜像(源码)
Dockerfile构建Tomcat镜像 目录 Dockerfile构建Tomcat镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试: 1、建立工作目录 [roothuyang1 ~]# mkdir tomcat[roothuyang1 ~]# cd tomcat/[roothuyang1 tomcat]# lsapach…...
Frida Error: getPackageInfoNoCheck(): has more than one overload的解决方法
使用frida绕过证书的时候执行代码: frida -U -f de.robv.android.xposed.installer --codeshare akabe1/frida-multiple-unpinning --no-pause遇到这样的错误 Error: getPackageInfoNoCheck(): has more than one overload, use .overload() to choose from: 网上查…...
flutter开发实战-RawKeyboardListener监听键盘事件及keycode。
flutter开发实战-RawKeyboardListener监听键盘事件及keycode。 最近开发过程中遇到外设备的按钮点击触发相应的操作,需要监听对应的keycode来开启游戏或者相关操作。 这里用到了RawKeyboardListener 一、RawKeyboardListener是什么? RawKeyboardListe…...

Temu、希音们全托管引争议,跨境电商应变“工贸一体化”
自7月27日Shopee宣布正式上线全托管模式起,全托管似乎突然又进入了爆发期。 在7月31日至8月1日举行的2023第八届深圳国际跨境电商贸易博览会上,全托管成为SHEIN、Wish、Lazada等平台力推的运营模式。进入8月,跨境圈突然涌现大批传言称&#…...

某科技公司提前批测试岗
文章目录 题目 今天给大家带来一家提前批测试岗的真题,目前已经发offer 题目 1.自我介绍 2.登录页面测试用例设计 3.如何模拟多用户登录 可以使用Jmeter,loadRunner性能测试工具来模拟大量用户登录操作去观察一些参数变化 4.有使用过Jmeter,loadRunner做过性能压…...

一次redis缓存不均衡优化经验
背景 高并发接口,引入redis作为缓存之后,运行一段时间发现redis各个节点在高峰时段的访问量严重不均衡,有的节点访问量7000次/s,有的节点访问量500次/s 此种现象虽然暂时不影响系统使用,但是始终是个安全隐患&#x…...

npm发布包
1.npm 登录 在控制台输入命令 npm login 按提示输入用户名,密码,邮箱后登录 如果出现如下提示 需要将淘宝镜像源切换为npm源,删除或注释以下内容就行 2.发布 进入准备发布的代码的根目录下,输入命令 npm publish 3.删除已发…...

Qt5.13引入QtWebApp的模块后报错: error C2440: “reinterpret_cast”: 无法从“int”转换为“quintptr”
1、开发环境 Win10-64 qt5.13 msvc2015-64bit-release 2、报错 新建一个demo工程。 引入QtWebApp的httpserver、logging、templateengine三个模块后。 直接运行,,此时报错如下: E:\Qt5.13.1\install\5.13.1\msvc2015_64\include\QtCore…...

软件为什么要进行性能压力测试?
软件为什么要进行性能压力测试?随着软件应用的不断增多和复杂度的提高,软件的性能对用户体验和业务成功至关重要。性能问题可能导致软件运行缓慢、崩溃或无响应,给用户带来不便甚至损失。为了确保软件能够在高负载和压力下正常运行࿰…...

阻塞队列BlockingQueue详解
一、阻塞队列介绍 1、队列 队列入队从队首开始添加,直至队尾;出队从队首出队,直至队尾,所以入队和出队的顺序是一样的 Queue接口 add(E) :在指定队列容量条件下添加元素,若成功返回true,若当前…...

pygame贪吃蛇游戏
pygame贪吃蛇游戏 贪吃蛇游戏通过enter键启动,贪吃蛇通过WSAD进行上下左右移动,每次在游戏区域中随机生成一个食物,每次吃完食物后,蛇变长并且获得积分;按空格键暂停。 贪吃蛇 import random, sys, time, pygame from …...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...

倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...

结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...