Leetcode每日一题:2681. 英雄的力量(2023.8.1 C++)

这篇具有很好参考价值的文章主要介绍了Leetcode每日一题:2681. 英雄的力量(2023.8.1 C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

2681. 英雄的力量

题目描述:

实现代码与解析:

数学规律

原理思路:


2681. 英雄的力量

题目描述:

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

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

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

示例 1:

输入:nums = [2,1,4]
输出:141
解释:
第 1 组:[2] 的力量为 2^2 * 2 = 8 。
第 2 组:[1] 的力量为 1^2 * 1 = 1 。
第 3 组:[4] 的力量为 4^2 * 4 = 64 。
第 4 组:[2,1] 的力量为 2^2 * 1 = 4 。
第 5 组:[2,4] 的力量为 4^2 * 2 = 32 。
第 6 组:[1,4] 的力量为 4^2 * 1 = 16 。
第​ ​​​​​​7 组:[2,1,4] 的力量为 4^2 * 1 = 16 。
所有英雄组的力量之和为 8 + 1 + 64 + 4 + 32 + 16 + 16 = 141 。

示例 :

输入:nums = [1,1,1]
输出:7
解释:总共有 7 个英雄组,每一组的力量都是 1 。所以所有英雄组的力量之和为 7 。

实现代码与解析:

数学规律

class Solution {
public:
    int mod = 1e9 + 7;
    int sumOfPower(vector<int>& nums) {

        sort(nums.begin(), nums.end());
        long long res = 0, sum = 0;

        for (int i = 0; i < nums.size(); i++)
        {
            res = (res + (long long)nums[i] * (long long)nums[i] % mod * (nums[i] + sum)) % mod;
            sum = (sum * 2 + nums[i]) % mod; 
        }
        return res;
    }
};

原理思路:

        分析题目,可以发现,其实英雄能力值之和每个子集的最大值和最小值有关,所有我们先sort排序,然后遍历,让其作为最大值,这是固定的,所以只要找出以 nums[ i ] 为最大值结尾的子集的最小值的和最大值的平方相乘就得出了此种情况的英雄力量的和,最后全加起来,就得到了答案。

        所以关键的核心就时如何求出以 nums[ i ] 为最大值结尾的子集的最小值的和

比如排序后{1, 2, 3, 4}, 当遍历到4时,以其为最大值的子集有多少种?

        当选择1为最小值时,2可选可不选,3可选可不选,这样就是2 * 2 = 4 个,4 * (4 * 4)* 1就为一组力量值。可以发现一组力量值是和元素的个数和最小值有关的。

        那么我们可以总结出递推式,之间算出一个最大值平方需要乘的总和为:sum(nums[i] * 2 ^ 最小值与最大值中间的数字个数),i 从 0 到最大值下标

        这样就可以发现子集最小值总和明显是可以根据前一个的子集最小值总和算出来的。规律如下:

Leetcode每日一题:2681. 英雄的力量(2023.8.1 C++),Leetcode,leetcode,c++,算法文章来源地址https://www.toymoban.com/news/detail-639572.html

到了这里,关于Leetcode每日一题:2681. 英雄的力量(2023.8.1 C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Leetcode每日一题:15. 三数之和(2023.7.9 C++)

    目录 15. 三数之和 题目描述: 实现代码与解析: 双指针 原理思路:         给你一个整数数组  nums  ,判断是否存在三元组  [nums[i], nums[j], nums[k]]  满足  i != j 、 i != k  且  j != k  ,同时还满足  nums[i] + nums[j] + nums[k] == 0  。请 你返回所有和为  0  且不重复的三元组

    2024年02月13日
    浏览(41)
  • Leetcode每日一题:931. 下降路径最小和(2023.7.13 C++)

    目录 931. 下降路径最小和 题目描述: 实现代码与解析: 动态规划 原理思路:         给你一个  n x n  的  方形  整数数组  matrix  ,请你找出并返回通过  matrix  的 下降路径   的   最小和  。 下降路径  可以从第一行中的任何元素开始,并从每一行中选择一个元素

    2024年02月16日
    浏览(50)
  • LeetCode每日一题:2594. 修车的最少时间(2023.9.7 C++)

    目录 2594. 修车的最少时间 题目描述: 实现代码与解析: 二分 原理思路:         给你一个整数数组  ranks  ,表示一些机械工的  能力值  。 ranksi  是第  i  位机械工的能力值。能力值为  r  的机械工可以在  r * n2  分钟内修好  n  辆车。 同时给你一个整数  cars

    2024年02月09日
    浏览(52)
  • LeetCode每日一题:1921. 消灭怪物的最大数量(2023.9.3 C++)

    目录 1921. 消灭怪物的最大数量 题目描述: 实现代码与解析: 贪心 原理思路:         你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个  下标从 0 开始  且长度为  n  的整数数组  dist  ,其中  dist[i]  是第  i  个怪物与城市的  初始距离 (

    2024年02月10日
    浏览(43)
  • Leetcode每日一题:1444. 切披萨的方案数(2023.8.17 C++)

    目录 1444. 切披萨的方案数 题目描述: 实现代码与解析: 二维后缀和  + 动态规划 原理思路:         给你一个  rows x cols  大小的矩形披萨和一个整数  k  ,矩形包含两种字符:  \\\'A\\\'  (表示苹果)和  \\\'.\\\'  (表示空白格子)。你需要切披萨  k-1  次,得到  k  块披萨

    2024年02月12日
    浏览(52)
  • Leetcode每日一题:1289. 下降路径最小和 II(2023.8.10 C++)

    目录 1289. 下降路径最小和 II 题目描述: 实现代码与解析: 动态规划 原理思路:         给你一个  n x n  整数矩阵  grid  ,请你返回  非零偏移下降路径  数字和的最小值。 非零偏移下降路径  定义为:从  grid  数组中的每一行选择一个数字,且按顺序选出来的数字

    2024年02月13日
    浏览(39)
  • Leetcode每日一题:1782. 统计点对的数目(2023.8.24 C++)

    目录 1782. 统计点对的数目 题目描述: 实现代码与解析: hash + 双指针 原理思路:         给你一个无向图,无向图由整数  n   ,表示图中节点的数目,和  edges  组成,其中  edges[i] = [ui, vi]  表示  ui  和  vi  之间有一条无向边。同时给你一个代表查询的整数数组 

    2024年02月10日
    浏览(44)
  • Leetcode每日一题:2337. 移动片段得到字符串(2023.8.21 C++)

    目录 2337. 移动片段得到字符串 题目描述: 实现代码与解析: 双指针 原理思路:         给你两个字符串  start  和  target  ,长度均为  n  。每个字符串  仅  由字符  \\\'L\\\' 、 \\\'R\\\'  和  \\\'_\\\'  组成,其中: 字符  \\\'L\\\'  和  \\\'R\\\'  表示片段,其中片段  \\\'L\\\'  只有在其左侧直接

    2024年02月11日
    浏览(38)
  • LeetCode每日一题:1123. 最深叶节点的最近公共祖先(2023.9.6 C++)

    目录 1123. 最深叶节点的最近公共祖先 题目描述: 实现代码与解析: dfs 原理思路:         给你一个有根节点  root  的二叉树,返回它  最深的叶节点的最近公共祖先  。 回想一下: 叶节点  是二叉树中没有子节点的节点 树的根节点的  深度  为  0 ,如果某一节点的

    2024年02月09日
    浏览(59)
  • Leetcode每日一题:1267. 统计参与通信的服务器(2023.8.24 C++)

    目录 1267. 统计参与通信的服务器 题目描述: 实现代码与解析: 写法一:两次遍历 + hash 原理思路: 写法二:三次遍历 原理思路:         这里有一幅服务器分布图,服务器的位置标识在  m * n  的整数矩阵网格  grid  中,1 表示单元格上有服务器,0 表示没有。 如果两

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包