【贪心算法】在有盾牌的情况下能通过每轮伤害的最小值(亚马逊笔试题)
思路:
采用贪心算法,先计算出来所有的伤害值,然后再计算每轮在使用盾牌的情况下能减少伤害的最大值,最后用总的伤害值减去能减少的最大值就是最少的总伤害值
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;
}