给定一个包含正数和负数的整数数组 A
,找到一个元素绝对值之和最小的(连续)子数组,例如:
A = [2, -4, 6, -3, 9]
|(−4) + 6 + (−3)| = 1 <- minimal absolute sum
我先实现了一个蛮力算法,时间复杂度为O(N^2)
或O(N^3)
,虽然它可以得到正确的结果。但是任务要求:
complexity:
- expected worst-case time complexity is O(N*log(N))
- expected worst-case space complexity is O(N)
经过一番搜索,我认为 Kadane 算法可以被修改以适应这个问题,但我没有成功。
我的问题是 - Kadane 算法是否是正确的选择?如果不是,你能指导我正确的方向(或者提供一个可以帮助我的算法的名称)吗?我不需要现成的代码,只是需要找到正确的算法。