import java.util.Arrays;
// 0891. Sum of Subsequence Widths
class Solution {
public int sumSubseqWidths(int[] nums) {
final long MOD = 1000000007;
Arrays.sort(nums);
long ans = 0L;
int len = nums.length;
long[] powerBased2 = new long[len];
powerBased2[0] = 1L;
for (int i = 1; i < len; ++i) {
powerBased2[i] = (powerBased2[i - 1] << 1) % MOD;
}
for (int i = 0; i < len; ++i) {
ans = (ans + (powerBased2[i] - powerBased2[len - 1 - i]) * nums[i]) % MOD;
}
return (int) ans;
}
}
学习笔记:
今天这是一道数学题,先发现和顺序无关,那就排序。
然后就看这个数成为最小值的次数,和成为最大值的次数。
然后移项整理出结果。