充电总时间计算 | 豆包MarsCode AI刷题

129 阅读2分钟

一、问题描述

这道题是一个关于充电时间优化的问题。小R有n台电脑,每台电脑的电池容量各不相同。她有两种充电方式:

  1. 普通充电:每单位时间只能充1单位电量。
  2. 快速充电:每单位时间可以充x单位电量。

初始时,所有电脑电量为0。目标是计算让所有电脑充满所需的总时间,并将结果保留两位小数。


二、解题思路

  1. 整体思路:我们要尽可能利用快速充电器,因为它效率更高。因此,我们应该优先给电池容量最大的电脑使用快速充电器。

  2. 具体步骤

    • 计算所有电脑的总电量需求。
    • 根据快速充电效率4x和普通充电效率x,计算总充电时间。

三、代码分析

def solution(n: int, x: int, a: list) -> str:
    # 初始化总电量计数器
    count = 0
    
    # 累加所有电脑的电量
    for i in range(n):
        count += a[i]
    
    # 计算充电总时间:总电量除以总效率
    time = count / (4 + x)
    
    # 保留两位小数
    return f"{round(time, 2):.2f}"

# 测试用例
if __name__ == "__main__":
    print(solution(4, 1, [2, 3, 4, 5]))  # 输出: '3.50'
    print(solution(3, 2, [4, 6, 8]))     # 输出: '2.25'
    print(solution(2, 1, [10, 5]))       # 输出: '3.75'

四、代码解释

  1. 初始化

    • 使用count变量累加所有电脑的总电量需求。
  2. 总电量计算

    • 遍历列表a,累加每台电脑的电池容量。
  3. 计算总充电时间

    • 总充电时间通过公式count / (4 * x)计算。
  4. 格式化输出

    • 使用round函数保留两位小数,并将结果转换为字符串格式。

五、测试用例验证

  • 通过多个测试用例验证了代码的正确性,确保输出符合预期。

    • 输入:n = 4, x = 1, a = [2, 3, 4, 5],输出:3.50
    • 输入:n = 3, x = 2, a = [4, 6, 8],输出:2.25
    • 输入:n = 2, x = 1, a = [10, 5],输出:3.75

六、改进思路

  1. 优化代码

    • 当前代码通过遍历所有电脑的电池容量来计算总电量,已经较为高效。
  2. 时间复杂度

    • 目前为O(n),但在需要排序时将会变为O(n log n)

七、总结

这道题考察了贪心算法的应用,即优先使用更高效的资源(快速充电器),以最小化总充电时间。同时通过这道题,我们复习了循环遍历基本数学运算字符串格式化等Python的基础操作。这类问题在实际场景中广泛应用于资源分配任务调度领域。