2025-02-14:与敌人战斗后的最大分数。用go语言,给定一个从0开始的整数数组 enemyEnergies,表示敌人的能量值,以及一个整数 currentEnergy,表示你初始的能量总量。你的初始得分为0,并且所有敌人开始时都是未标记的。

你可以进行以下两种操作任意次数(包括0次)以得分:

1.选择一个未标记的敌人 i,前提是 currentEnergy 大于等于 enemyEnergies[i]。此操作会使你获得1分,并且你的能量值减少 enemyEnergies[i],即 currentEnergy 更新为 currentEnergy - enemyEnergies[i]。

2.如果你当前得分至少为1,你可以选择一个未标记的敌人 i,此时你的能量值将增加 enemyEnergies[i],即 currentEnergy 更新为 currentEnergy + enemyEnergies[i],同时该敌人会被标记。

最终,你需要计算通过这些操作可以获得的最高分数。

1 <= enemyEnergies.length <= 100000。

1 <= enemyEnergies[i] <= 1000000000。

0 <= currentEnergy <= 1000000000。

输入:enemyEnergies = [3,2,2], currentEnergy = 2。

输出:3。

解释:

通过以下操作可以得到最大得分 3 分:

对敌人 1 使用第一种操作:points 增加 1 ,currentEnergy 减少 2 。所以 points = 1 且 currentEnergy = 0 。

对敌人 0 使用第二种操作:currentEnergy 增加 3 ,敌人 0 被标记。所以 points = 1 ,currentEnergy = 3 ,被标记的敌人包括 [0] 。

对敌人 2 使用第一种操作:points 增加 1 ,currentEnergy 减少 2 。所以 points = 2 且 currentEnergy = 1 ,被标记的敌人包括[0] 。

对敌人 2 使用第二种操作:currentEnergy 增加 2 ,敌人 2 被标记。所以 points = 2 ,currentEnergy = 3 且被标记的敌人包括 [0, 2] 。

对敌人 1 使用第一种操作:points 增加 1 ,currentEnergy 减少 2 。所以 points = 3 ,currentEnergy = 1 ,被标记的敌人包括 [0, 2] 。

答案2025-02-14:


题目来自leetcode3207。

大体步骤如下:

Go完整代码如下:

package main

import (
	"fmt"
	"math"
)

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)
}


func main() {
	enemyEnergies := []int{3,2,2}
	currentEnergy := 2
	result := maximumPoints(enemyEnergies,currentEnergy)
	fmt.Println(result)
}

2025-02-14:与敌人战斗后的最大分数。用go语言,给定一个从0开始的整数数组 enemyEnergies,表示敌人的能量值,以及一个整数 currentEnergy,表示你初始的能量总量。你的_Go

Rust完整代码如下:

fn maximum_points(enemy_energies: &[i32], current_energy: i32) -> i64 {
    // 找出最小值和总和
    let mn = enemy_energies.iter().min().cloned().unwrap_or(0);
    let s: i32 = enemy_energies.iter().sum();

    // 如果当前能量小于最小敌人能量,返回0
    if current_energy < mn {
        return 0;
    }

    // 计算最大可获得点数
    ((current_energy + s - mn) / mn) as i64
}

fn main() {
    let enemy_energies = vec![3, 2, 2];
    let current_energy = 2;
    let result = maximum_points(&enemy_energies, current_energy);
    println!("{}", result);
}

2025-02-14:与敌人战斗后的最大分数。用go语言,给定一个从0开始的整数数组 enemyEnergies,表示敌人的能量值,以及一个整数 currentEnergy,表示你初始的能量总量。你的_数组_02

Python完整代码如下:

# -*-coding:utf-8-*-

def maximum_points(enemy_energies, current_energy):
    min_energy = float('inf')
    total_energy = 0
    
    for e in enemy_energies:
        min_energy = min(min_energy, e)
        total_energy += e
        
    if current_energy < min_energy:
        return 0
    
    return (current_energy + total_energy - min_energy) // min_energy

if __name__ == "__main__":
    enemy_energies = [3, 2, 2]
    current_energy = 2
    result = maximum_points(enemy_energies, current_energy)
    print(result)

2025-02-14:与敌人战斗后的最大分数。用go语言,给定一个从0开始的整数数组 enemyEnergies,表示敌人的能量值,以及一个整数 currentEnergy,表示你初始的能量总量。你的_Rust_03