题解5| 豆包MarsCode AI刷题

171 阅读2分钟

问题描述

小M的任务是调整一只股票的价格,使其符合一个给定的正整数序列𝑝0,𝑝1,…,𝑝𝑛−1p0​,p1​,…,pn−1​,并且要确保每个月的股票上涨系数不能超过某个百分比𝑘k。上涨系数定义为当月价格相对于之前所有月份价格总和的比例。如果上涨系数超过𝑘%k%,就需要对某些月份的价格进行调整,以尽量减少对整体序列的变更。

你需要输出在保证上涨系数不超过𝑘%k%的情况下,最少需要增加的价格总和。 public class Main { public static int solution(int n, int k, int[] p) { int totalIncrease = 0; // 需要增加的价格总和 int sum = 0; // 之前所有月份价格总和

    for (int i = 0; i < n; i++) {
        // 计算上涨系数
        double increaseRate = ((double) p[i] / (double) sum) * 100;

        // 如果上涨系数超过 k%,则需要调整
        while (increaseRate > k) {
            // 找到价格最低的月份,并增加其价格
            int minIndex = -1;
            int minValue = Integer.MAX_VALUE;
            for (int j = 0; j < i; j++) {
                if (p[j] < minValue) {
                    minValue = p[j];
                    minIndex = j;
                }
            }

            // 增加最低月份的价格
            p[minIndex]++;
            sum++;
            totalIncrease++;

            // 重新计算上涨系数
            increaseRate = ((double) p[i] / (double) sum) * 100;
        }

        // 更新之前所有月份价格总和
        sum += p[i];
    }

    return totalIncrease;
}

public static void main(String[] args) {
    int[] arr1 = {1000, 34, 12, 27, 131};
    int[] arr2 = {100, 1, 1, 1};
    int[] arr3 = {500, 50, 30, 20, 10, 60};

    System.out.println(solution(5, 12, arr1) == 19);
    System.out.println(solution(4, 10, arr2) == 0);
    System.out.println(solution(6, 15, arr3) == 0);
}

}

题解: 问题要求我们调整一个股票价格序列,使得每个月的股票上涨系数不超过给定的百分比 kk。上涨系数定义为当月价格相对于之前所有月份价格总和的比例。如果上涨系数超过 kk%,则需要调整某些月份的价格,以尽量减少对整体序列的变更,并输出最少需要增加的价格总和。 解题步骤如下: 初始化变量 totalIncrease 为 0,用于记录需要增加的价格总和;初始化变量 sum 为 0,用于记录之前所有月份价格总和。 遍历每个月的股票价格,计算上涨系数。上涨系数的计算公式为:

上涨系数=当月价格之前所有月份价格总和之前所有月份价格总和×100\text{上涨系数} = \frac{\text{当月价格} - \text{之前所有月份价格总和}}{\text{之前所有月份价格总和}} \times 100%

如果上涨系数超过 kk%,则需要调整价格。我们优先增加价格最低的月份,因为这样可以最小化调整。 在需要调整的情况下,遍历之前的月份,找到价格最低的月份,并将其价格增加 1。同时更新 sum 和 totalIncrease。 重新计算上涨系数,如果仍然超过 kk%,则继续调整,直到上涨系数不超过 kk%。 更新 sum 为之前所有月份价格总和加上当前月份的价格。 重复步骤 2 到 6,直到遍历完所有月份。 最后,返回 totalIncrease,即最少需要增加的价格总和。 代码实现如上所示,它通过遍历和调整,确保了每个月的上涨系数不超过给定的百分比 kk,并且计算了最少需要增加的价格总和。 在 main 方法中,我们测试了三个不同的股票价格序列,并验证了 solution 方法的输出是否与预期相符。通过这种方式,我们可以确保我们的解决方案是正确的。