【每日一题Day282】LC2681英雄力量 | 排序+数学

简介: 【每日一题Day282】LC2681英雄力量 | 排序+数学

英雄力量【LC2681】

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

i0 ,i1 ,… ik 表示这组英雄在数组中的下标。那么这组英雄的力量为 max(nums[i0],nums[i1] ... nums[ik])2 * min(nums[i0],nums[i1] ... nums[ik]) 。

请你返回所有可能的 非空 英雄组的 力量 之和。由于答案可能非常大,请你将结果对 109 + 7 取余。

妙哉

  • 思路
  • 对于子序列而言,数组元素顺序不影响结果,因此先将数组排序
  • 枚举每个元素作为子序列的最小值,那么元素nums[i]作为最小值的子序列的贡献为image.png
  • 实现时从右往左枚举左小指,先将nums[i]3累加至结果,然后维护变量p,每次将nums[i]p累加至结果,再令p=p2+nums[i]2
  • 实现
class Solution {
    public int sumOfPower(int[] nums) {
        final int mod = (int) 1e9 + 7;
        Arrays.sort(nums);
        long ans = 0, p = 0;
        for (int i = nums.length - 1; i >= 0; --i) {
            long x = nums[i];
            ans = (ans + (x * x % mod) * x) % mod;
            ans = (ans + x * p % mod) % mod;
            p = (p * 2 + x * x % mod) % mod;
        }
        return (int) ans;
    }
}
作者:ylb
链接:https://leetcode.cn/problems/power-of-heroes/solutions/2367175/python3javacgotypescript-yi-ti-yi-jie-pa-lgos/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度

时间复杂度:O ( log n )

空间复杂度:O ( n log n )

————————————————

版权声明:本文为CSDN博主「TIkitianya」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Tikitian/article/details/132036644

目录
相关文章
|
算法 Android开发 Python
LeetCode 周赛上分之旅 #43 计算机科学本质上是数学吗?
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
62 0
LeetCode 周赛上分之旅 #43 计算机科学本质上是数学吗?
|
4月前
递推7------7-7 sdut-C语言实验-三国佚事——巴蜀之危分数
递推7------7-7 sdut-C语言实验-三国佚事——巴蜀之危分数
22 0
|
6月前
|
算法 Python
Python技术分享:使用穷举法解决鸡兔同笼问题
Python技术分享:使用穷举法解决鸡兔同笼问题
281 1
|
6月前
【每日一题Day338】LC2582递枕头 | 模拟+数学
【每日一题Day338】LC2582递枕头 | 模拟+数学
29 0
|
6月前
|
机器人
【每日一题Day343】LC2731移动机器人 | 脑筋急转弯+数学
【每日一题Day343】LC2731移动机器人 | 脑筋急转弯+数学
50 0
|
6月前
【每日一题Day154】LC1626无矛盾的最佳球队 | 动态规划
【每日一题Day154】LC1626无矛盾的最佳球队 | 动态规划
37 0
|
机器学习/深度学习 存储 C语言
【八大排序(三)】堆排序-搞文学出生的计算机教授
【八大排序(三)】堆排序-搞文学出生的计算机教授
|
C语言 C++
PTA团体程序设计天梯赛-练习集: L1-050 倒数第N个字符串 ( 15分 )
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。 输入格式: 输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。 输出格式: 在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。 输入样例:
176 0
|
人工智能 算法 C++
【每日算法Day 88】超越妹妹教你如何做这道排序题
【每日算法Day 88】超越妹妹教你如何做这道排序题
|
存储 算法 调度
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
400 0
下一篇
无影云桌面