LeetCode in Kotlin

2681. Power of Heroes

Hard

You are given a 0-indexed integer array nums representing the strength of some heroes. The power of a group of heroes is defined as follows:

Return the sum of the power of all non-empty groups of heroes possible. Since the sum could be very large, return it modulo 109 + 7.

Example 1:

Input: nums = [2,1,4]

Output: 141

Explanation:

1st group: [2] has power = 22 * 2 = 8.

2nd group: [1] has power = 12 * 1 = 1.

3rd group: [4] has power = 42 * 4 = 64.

4th group: [2,1] has power = 22 * 1 = 4.

5th group: [2,4] has power = 42 * 2 = 32.

6th group: [1,4] has power = 42 * 1 = 16.

7th group: [2,1,4] has power = 42 * 1 = 16.

The sum of powers of all groups is 8 + 1 + 64 + 4 + 32 + 16 + 16 = 141.

Example 2:

Input: nums = [1,1,1]

Output: 7

Explanation: A total of 7 groups are possible, and the power of each group will be 1. Therefore, the sum of the powers of all groups is 7.

Constraints:

Solution

class Solution {
    private val mod = 1_000_000_007L
    fun sumOfPower(nums: IntArray): Int {
        nums.sort()
        var sumOfMin = 0L
        var res = 0L
        for (num in nums) {
            val max = (num.toLong() * num.toLong()) % mod
            val mySumOfMin = (sumOfMin + num) % mod
            res = (res + max * mySumOfMin) % mod
            sumOfMin = (sumOfMin + mySumOfMin) % mod
        }
        return res.toInt()
    }
}