2023-08-01 LeetCode每日一题(英雄的力量)

2023-08-01每日一题

一、题目编号

2681. 英雄的力量

二、题目链接

点击跳转到题目位置

三、题目描述

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

i0 ,i1 ,… ik 表示这组英雄在数组中的下标。那么这组英雄的力量为 max(nums[i0],nums[i1] … nums[ik])2 * min(nums[i0],nums[i1] … nums[ik]) 。
请你返回所有可能的 非空 英雄组的 力量 之和。由于答案可能非常大,请你将结果对 109 + 7 取余

示例1:
2023-08-01 LeetCode每日一题(英雄的力量)_第1张图片
示例2:
在这里插入图片描述
提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109

四、解题代码

class Solution {
public:
    int sumOfPower(vector<int>& nums) {
        int n = nums.size();
        sort(nums.begin(), nums.end());
        vector<int> dp(n);
        vector<int> preSum(n + 1);
        int res = 0, mod = 1e9 + 7;
        for (int i = 0; i < n; i++) {
            dp[i] = (nums[i] + preSum[i]) % mod;
            preSum[i + 1] = (preSum[i] + dp[i]) % mod;
            res = (int) ((res + (long long) nums[i] * nums[i] % mod * dp[i]) % mod);
            if (res < 0) {
                res += mod;
            }
        }
        return res;
    }
};

五、解题思路

(1) 运用前缀和+动态规划解决问题。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)