【贪心算法】在有盾牌的情况下能通过每轮伤害的最小值(亚马逊笔试题)

【贪心算法】在有盾牌的情况下能通过每轮伤害的最小值(亚马逊笔试题)_第1张图片

思路:
采用贪心算法,先计算出来所有的伤害值,然后再计算每轮在使用盾牌的情况下能减少伤害的最大值,最后用总的伤害值减去能减少的最大值就是最少的总伤害值

public static long getMinimumValue(List<Integer> power, int armor) {
    long totalDamage = 0;
    int maxReduction = 0;
    for (int p : power) {
        totalDamage += p;
        // 护甲在该轮能减少的伤害
        int reduction = Math.min(p, armor);
        if (reduction > maxReduction) {
            maxReduction = reduction;
        }
    }
    // 总伤害 - 最大减少量 + 1(保证血量>0)
    return totalDamage - maxReduction + 1;
}

你可能感兴趣的:(贪心算法,算法)