100182. 与敌人战斗后的最大分数
给你一个下标从 0 开始的整数数组 enemyEnergies
,它表示一个下标从 0 开始的敌人能量数组。
同时给你一个整数 currentEnergy
,它表示你一开始拥有的能量值总量。
你一开始的分数为 0
,且一开始所有的敌人都未标记。
你可以通过以下操作 之一 任意次(也可以 0 次)来得分:
currentEnergy >= enemyEnergies[i]
的敌人 i
。在这个操作中:
1
分。enemyEnergies[i]
,也就是说 currentEnergy = currentEnergy - enemyEnergies[i]
。1
分,你可以选择一个 未标记 的敌人 i
。在这个操作中:
enemyEnergies[i]
,也就是说 currentEnergy = currentEnergy + enemyEnergies[i]
。i
被标记 。请你返回通过以上操作,最多 可以获得多少分。
示例 1:
输入:enemyEnergies = [3,2,2], currentEnergy = 2
输出:3
解释:
通过以下操作可以得到最大得分 3 分:
points
增加 1 ,currentEnergy
减少 2 。所以 points = 1
且 currentEnergy = 0
。currentEnergy
增加 3 ,敌人 0 被标记。所以 points = 1
,currentEnergy = 3
,被标记的敌人包括 [0]
。points
增加 1 ,currentEnergy
减少 2 。所以 points = 2
且 currentEnergy = 1
,被标记的敌人包括[0]
。currentEnergy
增加 2 ,敌人 2 被标记。所以 points = 2
,currentEnergy = 3
且被标记的敌人包括 [0, 2]
。points
增加 1 ,currentEnergy
减少 2 。所以 points = 3
,currentEnergy = 1
,被标记的敌人包括 [0, 2]
。示例 2:
输入:enemyEnergies = [2], currentEnergy = 10
输出:5
解释:
通过对敌人 0 进行第一种操作 5 次,得到最大得分。
提示:
1 <= enemyEnergies.length <= 105
1 <= enemyEnergies[i] <= 109
0 <= currentEnergy <= 109
原站题解
php 解法, 执行用时: 191 ms, 内存消耗: 26.7 MB, 提交时间: 2024-07-09 10:17:33
class Solution { /** * @param Integer[] $enemyEnergies * @param Integer $currentEnergy * @return Integer */ function maximumPoints($enemyEnergies, $currentEnergy) { $mn = min($enemyEnergies); if ( $currentEnergy < $mn ) return 0; return intval(($currentEnergy + array_sum($enemyEnergies) - $mn) / $mn); } }
golang 解法, 执行用时: 72 ms, 内存消耗: 8.2 MB, 提交时间: 2024-07-09 10:14:29
func maximumPoints(enemyEnergies []int, currentEnergy int) int64 { mn, s := math.MaxInt, 0 for _, e := range enemyEnergies { mn = min(mn, e) s += e } if currentEnergy < mn { return 0 } return int64((currentEnergy + s - mn) / mn) }
cpp 解法, 执行用时: 155 ms, 内存消耗: 73.2 MB, 提交时间: 2024-07-09 10:14:15
class Solution { public: long long maximumPoints(vector<int>& enemyEnergies, int currentEnergy) { int mn = ranges::min(enemyEnergies); if (currentEnergy < mn) { return 0; } long long s = reduce(enemyEnergies.begin(), enemyEnergies.end(), 0LL); return (currentEnergy + s - mn) / mn; } };
java 解法, 执行用时: 1 ms, 内存消耗: 54.9 MB, 提交时间: 2024-07-09 10:14:04
public class Solution { public long maximumPoints(int[] enemyEnergies, int currentEnergy) { int mn = Integer.MAX_VALUE; long s = 0; for (int e : enemyEnergies) { mn = Math.min(mn, e); s += e; } if (currentEnergy < mn) { return 0; } return (currentEnergy + s - mn) / mn; } }
python3 解法, 执行用时: 52 ms, 内存消耗: 30.5 MB, 提交时间: 2024-07-09 10:13:48
class Solution: def maximumPoints(self, enemyEnergies: List[int], currentEnergy: int) -> int: mn = min(enemyEnergies) if currentEnergy < mn: return 0 return (currentEnergy + sum(enemyEnergies) - mn) // mn