对每一个i(0<=i<n-1),算出区间[0,i]可以取的最大值left[i]和区间(i,n-1]的最大值right[i+1],他们的和为sum[i].left和right可以通过预处理,在计算时直接查出.
则所求为所有sum[i]中的最大值.(>0的数字少于2个的话特殊处理一下)
left的预处理:设一变量s初始为0,一直往右加,为负的时候则置0.left[i]为max(当前的s值,left[i-1]).
right同理,方向相反
一开始也是这么想的,不过在计算右区间最大值时还是想的从左到右的方向,成了O(n^2)了......
感觉这题还是挺强的...mark一下~
本文介绍了一种通过预处理计算区间最大值的高效算法。该算法适用于特定问题场景,通过计算左右区间的最大值来快速得出整个数组的有效解。特别讨论了如何避免O(n^2)的时间复杂度。
674

被折叠的 条评论
为什么被折叠?



