豆包ai程序7

66 阅读1分钟

小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 个 1a[1] = 3 代表数组 b 中有 3 个 2a[2] = 1 代表数组 b 中有 1 个 3

现在,你需要帮助小B求出 b 数组中所有连续子数组的极差之和。由于答案可能非常大,请对 109+7109+7 取模。

数组的极差定义为子数组的最大值减去最小值。 程序 import java.util.ArrayList; import java.util.List;

public class Main { public static int solution(int n, int[] a) { // 构造数组 b List b = new ArrayList<>(); for (int i = 0; i < n; i++) { for (int j = 0; j < a[i]; j++) { b.add(i + 1); } }

    // 计算极差之和
    int sum = 0;
    int mod = 1000000007;
    for (int i = 0; i < b.size(); i++) {
        for (int j = i; j < b.size(); j++) {
            // 计算子数组 [i, j] 的极差
            int max = Integer.MIN_VALUE;
            int min = Integer.MAX_VALUE;
            for (int k = i; k <= j; k++) {
                max = Math.max(max, b.get(k));
                min = Math.min(min, b.get(k));
            }
            sum = (sum + (max - min)) % mod;
        }
    }

    return sum;
}

public static void main(String[] args) {
    System.out.println(solution(2, new int[]{2, 1}) == 2);
    System.out.println(solution(3, new int[]{1, 2, 1}) == 6);
    System.out.println(solution(4, new int[]{2, 3, 1, 1}) == 26);
}

}