问题描述
小F得到了一个长度为 N 的数组 A,其中每个元素都是偶数,且数组编号从 0 到 N-1。请注意,数组 A 中的整数可以是负数。
你需要执行 N 个任务,编号从 0 到 N-1。在任务 i 中,你可以选择将 A[i] 乘以 2 或将 A[i] 除以 2。
你的任务是通过执行这些操作后,使数组 A 的元素和达到最大值,并返回这个最大和。
测试样例
样例1:
输入:
N = 3, A = [-4, 2, 4]
输出:10
样例2:
输入:
N = 2, A = [-8, 4]
输出:4
样例3:
输入:
N = 4, A = [-6, 6, 2, -2]
输出:12
题目解析
思路
给定一个整数列表 A 和一个整数 N,函数 solution 的目的是计算列表 A 中所有元素经过特定操作后的最大和。具体操作如下:
- 如果列表中的元素是非负数(即大于等于0),则将其乘以2。
- 如果列表中的元素是负数,则将其除以2并取整。
图解
假设我们有列表 A = [-4, 2, 4],我们可以按照以下步骤进行计算:
- 对于
-4,由于它是负数,所以计算结果为-4 / 2 = -2。 - 对于
2,由于它是非负数,所以计算结果为2 * 2 = 4。 - 对于
4,由于它是非负数,所以计算结果为4 * 2 = 8。
最终,将这些结果相加得到最大和:-2 + 4 + 8 = 10。
示例分析:
-
示例1:
N = 3, A = [-4, 2, 4]- 对于
-4:-4 / 2 = -2 - 对于
2:2 * 2 = 4 - 对于
4:4 * 2 = 8 - 总和:
-2 + 4 + 8 = 10 - 输出:
10
- 对于
-
示例2:
N = 2, A = [-8, 4]- 对于
-8:-8 / 2 = -4 - 对于
4:4 * 2 = 8 - 总和:
-4 + 8 = 4 - 输出:
4
- 对于
-
示例3:
N = 4, A = [-6, 6, 2, -2]- 对于
-6:-6 / 2 = -3 - 对于
6:6 * 2 = 12 - 对于
2:2 * 2 = 4 - 对于
-2:-2 / 2 = -1 - 总和:
-3 + 12 + 4 - 1 = 12 - 输出:
12
- 对于
代码详解
def solution(N: int, A: list) -> int:
max_sum = 0
for num in A:
if num >= 0:
max_sum += num * 2
else:
max_sum += num / 2
return int(max_sum)
-
初始化变量:
max_sum初始化为0,用于存储最终的最大和。 -
遍历列表:使用
for循环遍历列表A中的每个元素。 -
条件判断:
- 如果元素
num大于等于0(即非负数),则将其乘以2并累加到max_sum中。 - 如果元素
num小于0(即负数),则将其除以2并取整后累加到max_sum中。
- 如果元素
-
返回结果:返回
max_sum的整数部分。
知识总结
此代码片段展示了如何使用Python中的条件语句和循环结构来处理列表中的元素,并根据元素的正负值应用不同的运算规则。这符合Python编程中常见的控制流和函数定义的使用场景。通过这种方式,可以有效地解决涉及列表操作和数值计算的问题。
此外,代码中使用了 `if __name__ == '__main__':` 这一判断语句,确保当脚本直接运行时,测试用例会被执行,而当脚本被导入到其他模块中时,这些测试用例不会被执行。这种做法有助于保持代码的模块化和可重用性。
总结来说,这段代码是一个典型的Python示例,展示了如何利用基本的控制流和函数来实现特定的数值计算任务。
通过以上解析,我们可以清晰地理解如何解决这个问题,并且掌握了相关的Python编程技巧。