342.充电总时间计算
问题描述
小R有nn部电脑,每部电脑的电池容量分别为aiai。她可以使用两种不同的充电方式来给电脑充电:
- 普通充电:每单位时间为电脑充电xx单位的电量。
- 闪充:每单位时间为电脑充电4x4x单位的电量。
现在,所有电脑的电量都为零。小R希望使用闪充给所有电脑充满电,计算她需要的总充电时间。请保留结果的小数点后两位。
思路解析
本题的目标是计算使用闪充方式给所有电脑充满电所需要的总充电时间。已知每部电脑的电池容量不同,而闪充每单位时间能为电脑充电 4x 单位的电量,所以要得到总充电时间,需要先计算出每部电脑单独充满电所需的时间,再将所有电脑的充电时间累加起来,最后按照要求保留两位小数输出结果。
解题步骤
- 函数定义与初始化:
首先定义了一个名为
solution的函数,它接受三个参数:n表示电脑的数量(整型),x表示普通充电每单位时间的充电量(整型,用于计算闪充的充电量),a是一个列表,里面存储了每部电脑的电池容量(整型元素组成的列表)。在函数内部,先初始化一个变量total_time并赋值为0.0,用于后续累加每部电脑的充电时间,这个变量的数据类型为浮点数,方便处理可能出现的小数情况以及最终保留两位小数的操作。 - 计算每部电脑的充电时间并累加:
通过一个
for循环遍历输入的列表a,其中battery变量依次代表列表中的每一个元素,也就是每部电脑的电池容量。对于每部电脑,使用公式battery / (4 * x)来计算其使用闪充充满电所需的时间,这里的4 * x就是闪充每单位时间的充电量,将电池容量除以每单位时间的充电量就能得到充电时间。然后将每部电脑的充电时间累加到total_time变量上,这样循环结束后,total_time就包含了所有电脑使用闪充充满电总共需要的时间。 - 结果处理与返回:
在计算完所有电脑的总充电时间后,需要按照题目要求将结果保留两位小数并转换为字符串形式返回。这里使用了 Python 的格式化字符串(f-string)的功能,
f"{total_time:.2f}"表示将total_time这个浮点数按照保留两位小数的格式进行格式化,生成对应的字符串,最后通过return语句将这个格式化后的字符串返回,作为函数的结果。
复杂度分析
时间复杂度:
代码里关键操作是 solution 函数中的 for 循环,它会遍历存储电脑电池容量的列表,循环次数取决于电脑数量 n(也就是列表长度)。循环内的计算操作时间复杂度都是常数级别的,所以整体时间复杂度随电脑数量 n 线性变化,为O(n)。
空间复杂度:
函数内部除了接收的参数外,只额外定义了少量固定大小的变量。而参数里主要是存储电脑电池容量的列表 a 占用空间随电脑数量 n 变化,所以整体空间复杂度取决于 n,为O(n)。
Code
def solution(n: int, x: int, a: list) -> str:
# 初始化总充电时间为0
total_time = 0.0
# 遍历每部电脑的电池容量
for battery in a:
# 计算每部电脑的充电时间并累加到总充电时间
total_time += battery / (4 * x)
# 将总充电时间保留两位小数并转换为字符串
result = f"{total_time:.2f}"
return result
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')