#刷题交流#
问题描述:
小B拥有一个数组 a,她使用这个数组构造了一个新数组 b。其中,a[i] 表示在新数组 b 中有 a[i] 个 i+1。例如,若 a = [2, 3, 1],那么新数组 b = [1, 1, 2, 2, 2, 3],因为 a[0] = 2 代表数组 b 中有 2 个 1,a[1] = 3 代表数组 b 中有 3 个 2,a[2] = 1 代表数组 b 中有 1 个 3。
现在,你需要帮助小B求出 b 数组中所有连续子数组的极差之和。由于答案可能非常大,请对 (10)^9+7 取模。数组的极差定义为子数组的最大值减去最小值。
测试样例:
样例1:
输入:n = 2,a = [2, 1]
输出:2
样例2:
输入:n = 3,a = [1, 2, 1]
输出:6
样例3:
输入:n = 4,a = [2, 3, 1, 1]
输出:26
问题分析:
需要从一个数组 a 构造一个新的数组 b,然后计算 b 中所有连续子数组的极差之和。极差定义为子数组的最大值减去最小值。
数据结构的选择逻辑:
数组 b 的构造:
数组 b 是通过将 a 中的每个元素 a[i] 对应的 i+1 重复 a[i] 次来构造的。
例如,如果 a = [2, 3, 1],那么 b = [1, 1, 2, 2, 2, 3]。
极差之和的计算:
我们需要计算 b 中所有可能的连续子数组的极差之和。
极差是子数组的最大值减去最小值。
算法步骤:
构造数组 b:
遍历数组 a,对于每个 a[i],将其对应的 i+1 重复 a[i] 次,添加到数组 b 中。
计算极差之和:
使用两层循环遍历所有可能的子数组 b[i:j+1]。
在内部循环中,动态更新当前子数组的最大值和最小值。
计算当前子数组的极差,并累加到 total_sum 中,同时取模 (10)^9+7。