{25,47,-78,-23,12,-45,47,13,85,-100,120}
在以上这串数组中,如何划分子数组,可以使其中一个子数组的内部和达到最大?
{25}是它的一个子数组,{25,47}也是它的一个子数组,但25+47>25,{25,47,-78}依旧是子数组,但很明显,这个数组的和依旧小于{25,47}这个数组的和。所以依次类推,我们可以将所有的子数组都列出来,然后将结果放到一个数组中最后进行比较即可。
但我的思路是这样的:求最大子数组的和,那么我的眼中只有正数——凡是存在负数的子数组一律抛弃,那么就可以这样:如果第一个数是正数,将它赋给一个变量,然后判断第二个数,正数则与参数相加再赋给变量;负数则跳过,将变量放到数组中,然后变量重新置为0。另一种可能,第一个数是负数,那么直接跳过,判断第二个数,此时就进入了循环。
但经过我的思考,我发现我的程序不太好,第一,程序的“弯弯绕”太多了,这样会导致一个月以后,我自己都不一定能读懂我写的是什么。
第二,程序的范围太窄了,没错,本程序中解决的问题是返回一个整数数组中最大子数组的和,但如果别人问的是返回一个整数数组中最小子数组的和呢?再问列出所有整数数组的子数组的和呢?
程序地址
https://github.com/Evilleon/The-sum-of-the-largest-subarrays.git