此题与jz042.连续子数组的最大和相同。可以用动态规划的思想解决该题。如果我们用函数f(i)表示以第i个数字结尾的子数组的最大和,那么我们需要求出max[f(i)],其中0<=i < n。那么,我们可以用递归公示求f(i),当i=0或f(i-1)<=0时,f(i)就是数组中的第i个数字,如同上面的前面子数组和为负数的情况;如果i!=0并且f(i-1)> 0时,f(i)= f(i-1)+ nums[i]。虽然我们用递归的方式分析动态规划的问题,但最终都会基于循环去编码,这样写出来的代码如下。这个算法时间复杂度为O(N),空间复杂度为O(1)。
PREVIOUSjz043.1~n整数中1出现的次数