最大子阵列总和,使得和是奇数

时间:2014-03-09 10:42:32

标签: php algorithm sum

给定一个整数数组,我必须找到具有最大总和的子数组,使得总和是奇数。

例如在数组“2,5,7”中答案是7,2。直到现在我遇到了Kadane's algorithm及其在http://pastebin.com/qwWzbxKw

的实施

但是我如何扩展它以使得总和是奇数。

修改

数组的所有元素都是整数和正数

1 个答案:

答案 0 :(得分:1)

看起来你不要求它是连续的(从你的例子)。这更简单,只需要考虑所有正面元素,如果总和是奇数 - 你就完成了。如果是偶数 - 删除最低正奇数元素,或添加最高奇数负元素(做得更好,它只取决于abs(highest_negative_odd)lowest_positive_odd)。

伪代码:

  1. sum< - 所有积极因素的总和
  2. 如果sum是奇数 - 完成,则返回相关的子阵列
  3. x < - 最高负奇数元素
  4. y&lt; - 最低正奇数元素
  5. 如果abs(x)&lt; ÿ
    • sum&lt; - sum + x //将x添加到子阵列
  6. 否则:
    • sum&lt; - sum - y //从子阵列中删除y
  7. 返回相关子阵列
  8. 修改

    对于所有正数,它更容易 - 如果总和不是奇数 - 只需踢出最小的奇数。