程序将数组分成N个连续子数组,使每个子数组的和为奇数

Posted

技术标签:

【中文标题】程序将数组分成N个连续子数组,使每个子数组的和为奇数【英文标题】:Program to divide the array into N continuous subarray so that the sum of each subarray is odd 【发布时间】:2019-10-29 07:49:26 【问题描述】:

这个问题有两个输入:数组(arr)和由它组成的子数组的数量(n)。子数组的和应该是奇数

如果所有数字都是偶数,这已经很清楚了。奇和子数组是不可能的。对于奇数和,连续的 2 个数字应该是奇数+偶数或偶数+奇数。但我似乎无法将它们分成 N 个子数组。请帮忙解释一下逻辑。

我的逻辑可能完全错误。我似乎无法掌握它的窍门。

【问题讨论】:

将数组除以第一个n - 1个奇数,然后测试最后一个子数组总和是否为奇数。例如,对于 n = 3,数组 1 | 2 3 | 5 7 9 可以被除; 1 | 2 4 6 奇数太少, 1 | 3 | 5 7 的最后一个子数组有一个偶数和,并且没有重新排列拆分可以改变它。还是我错过了什么? 【参考方案1】:

从数组的第一个元素开始。使用变量cur_sum 来跟踪当前总和。迭代数组直到cur_sum 变为奇数,这成为第一个子数组。然后制作cur_sum = 0 并开始迭代剩余的数组。一旦你得到(n-1)个这样的子数组,你必须检查剩余元素的总和是否为奇数(它成为第 n 个子数组),如果不是,则不可能。

【讨论】:

没错。最后一个子数组是 50-50 机会博弈。总和可以是偶数或奇数。没有什么东西可以有效地减少它。不过还是谢谢你的回答。 如果你只是想知道它是否可能。然后数奇数个数,设oddCount,设x = oddCount - (n-1)'. if 'x > 0' and x`为奇数,则有可能,否则不行。

以上是关于程序将数组分成N个连续子数组,使每个子数组的和为奇数的主要内容,如果未能解决你的问题,请参考以下文章

连续子数组的最大和

连续子数组的最大和(基于动态规划)

最大连续子数组,线性时间解法

返回一个整数数组中最大子数组的和

返回一个整数数组中最大子数组的和

找出一个整数数组的和最大的连续子数组