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

【LeetCode 算法】Power of Heroes 英雄的力量

文章目录

  • Power of Heroes 英雄的力量

Power of Heroes 英雄的力量

问题描述:

给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的 力量 定义为:

i 0 , i 1 , . . . i k i_0 ,i_1 ,... i_k i0i1...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])2min(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 maxmaxmin.

暴力

如果是使用暴力的方式,就是枚举所有的子序列然后对每个子序列进行找 m a x , m i n max,min maxmin
以当前数组的规模,可能有 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} 2i1,它们可以为最终的ans提供 a [ 0 ] ∗ a [ i ] ∗ 2 i − 1 a[0]*a[i]*2^{i-1} a[0]a[i]2i1.

同理可以计算得到

  • a [ 1 ] ∗ a [ i ] ∗ 2 i − 2 a[1]*a[i]*2^{i-2} a[1]a[i]2i2.
  • a [ 2 ] ∗ a [ i ] ∗ 2 i − 3 a[2]*a[i]*2^{i-3} a[2]a[i]2i3.
  • a [ 3 ] ∗ a [ i ] ∗ 2 i − 4 a[3]*a[i]*2^{i-4} a[3]a[i]2i4.
  • a [ i − 2 ] ∗ a [ i ] ∗ 2 i − 1 − i + 2 a[i-2]*a[i]*2^{i-1-i+2} a[i2]a[i]2i1i+2
  • a [ i − 1 ] ∗ a [ i ] ∗ 2 i − 1 − i + 1 a[i-1]*a[i]*2^{i-1-i+1} a[i1]a[i]2i1i+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]2i1+a[1]a[i]2i2+..+a[i1]a[i]2i1i+1p[i]=a[i](a[i]2+a[0]2i1+a[1]2i2+..+a[i1]2i1i+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]2i12+a[1]2i22+..+a[i1]2i1i+12+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]2i1+a[1]2i2+..+a[i1]2i1i+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=2Si+a[i1]
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 英雄的力量问题描述&#xff1a;分析代码Math Tag Power of Heroes 英雄的力量 问题描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums &#xff0c;它表示英雄的能力值。如果我们选出一部分英雄&#xff0c;这组英雄的 力量 定义为&#xff…...

合宙Air724UG LuatOS-Air script lib API--ntp

ntp Table of Contents ntp ntp.timeSync(period, fnc, fun) ntp 模块功能&#xff1a;网络授时. 重要提醒&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 本功能模块采用多个免费公共的NTP服务器来同步时间 并不能保证任何时间任何地点都能百分…...

LangChain+ChatGLM大模型应用落地实践(一)

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

PSO粒子群优化算法

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

记一次 .NET某医疗器械清洗系统 卡死分析

一&#xff1a;背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题&#xff0c;回过头来看这个案例比较经典&#xff0c;这篇稍微整理一下供后来者少踩坑吧。 二&#xff1a;WinDbg 分析 1. 为什么会卡死 因为是窗体程序&#xff0c;理所当然就是看主…...

C# 基于Rijndael对文件进行加解密

介绍&#xff1a; Rijndael 是一种对称加密算法&#xff0c;也是 AES&#xff08;Advanced Encryption Standard&#xff09;的前身。它用于数据的加密和解密&#xff0c;并提供了安全且高效的加密功能。 在.NET Framework 中&#xff0c;Rijndael 类是一个实现了 Rijndael 算法…...

Elasticsearchr入门

首先在官网下载elasticsearch8.9版本&#xff0c;以及8.9版本的kibana。 解压&#xff0c;点击es8.9bin目录下的elasticsearch.bat文件启动es 如图所示即为成功。 启动之后打开idea&#xff0c;添加依赖 <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)&#xff1a;该数据集中包含2400个事件&#xff0c;每个事件指定了EEG.event结构的字段Type(类型)、position(位置)和…...

Dockerfile构建Tomcat镜像(源码)

Dockerfile构建Tomcat镜像 目录 Dockerfile构建Tomcat镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试&#xff1a; 1、建立工作目录 [roothuyang1 ~]# mkdir tomcat[roothuyang1 ~]# cd tomcat/[roothuyang1 tomcat]# lsapach…...

Frida Error: getPackageInfoNoCheck(): has more than one overload的解决方法

使用frida绕过证书的时候执行代码&#xff1a; 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。 最近开发过程中遇到外设备的按钮点击触发相应的操作&#xff0c;需要监听对应的keycode来开启游戏或者相关操作。 这里用到了RawKeyboardListener 一、RawKeyboardListener是什么&#xff1f; RawKeyboardListe…...

Temu、希音们全托管引争议,跨境电商应变“工贸一体化”

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

某科技公司提前批测试岗

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

一次redis缓存不均衡优化经验

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

npm发布包

1.npm 登录 在控制台输入命令 npm login 按提示输入用户名&#xff0c;密码&#xff0c;邮箱后登录 如果出现如下提示 需要将淘宝镜像源切换为npm源&#xff0c;删除或注释以下内容就行 2.发布 进入准备发布的代码的根目录下&#xff0c;输入命令 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三个模块后。 直接运行&#xff0c;&#xff0c;此时报错如下&#xff1a; E:\Qt5.13.1\install\5.13.1\msvc2015_64\include\QtCore…...

软件为什么要进行性能压力测试?

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

阻塞队列BlockingQueue详解

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

pygame贪吃蛇游戏

pygame贪吃蛇游戏 贪吃蛇游戏通过enter键启动&#xff0c;贪吃蛇通过WSAD进行上下左右移动&#xff0c;每次在游戏区域中随机生成一个食物&#xff0c;每次吃完食物后&#xff0c;蛇变长并且获得积分&#xff1b;按空格键暂停。 贪吃蛇 import random, sys, time, pygame from …...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...