最大化数组和的问题|豆包MarsCode AI 刷题

38 阅读3分钟

问题描述

小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],我们可以按照以下步骤进行计算:

  1. 对于 -4,由于它是负数,所以计算结果为 -4 / 2 = -2
  2. 对于 2,由于它是非负数,所以计算结果为 2 * 2 = 4
  3. 对于 4,由于它是非负数,所以计算结果为 4 * 2 = 8

最终,将这些结果相加得到最大和:-2 + 4 + 8 = 10

示例分析:

  1. 示例1N = 3, A = [-4, 2, 4]

    • 对于 -4-4 / 2 = -2
    • 对于 22 * 2 = 4
    • 对于 44 * 2 = 8
    • 总和:-2 + 4 + 8 = 10
    • 输出:10
  2. 示例2N = 2, A = [-8, 4]

    • 对于 -8-8 / 2 = -4
    • 对于 44 * 2 = 8
    • 总和:-4 + 8 = 4
    • 输出:4
  3. 示例3N = 4, A = [-6, 6, 2, -2]

    • 对于 -6-6 / 2 = -3
    • 对于 66 * 2 = 12
    • 对于 22 * 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)
  1. 初始化变量max_sum 初始化为0,用于存储最终的最大和。

  2. 遍历列表:使用 for 循环遍历列表 A 中的每个元素。

  3. 条件判断

    • 如果元素 num 大于等于0(即非负数),则将其乘以2并累加到 max_sum 中。
    • 如果元素 num 小于0(即负数),则将其除以2并取整后累加到 max_sum 中。
  4. 返回结果:返回 max_sum 的整数部分。

知识总结

此代码片段展示了如何使用Python中的条件语句和循环结构来处理列表中的元素,并根据元素的正负值应用不同的运算规则。这符合Python编程中常见的控制流和函数定义的使用场景。通过这种方式,可以有效地解决涉及列表操作和数值计算的问题。
此外,代码中使用了 `if __name__ == '__main__':` 这一判断语句,确保当脚本直接运行时,测试用例会被执行,而当脚本被导入到其他模块中时,这些测试用例不会被执行。这种做法有助于保持代码的模块化和可重用性。
总结来说,这段代码是一个典型的Python示例,展示了如何利用基本的控制流和函数来实现特定的数值计算任务。
通过以上解析,我们可以清晰地理解如何解决这个问题,并且掌握了相关的Python编程技巧。