一维整形数组,能否在 O(n) 时间内求其中连续子序列的绝对值的最小值

【一维整形数组,能否在 O(n) 时间内求其中连续子序列的绝对值的最小值】 请问,是连续子序列和的绝对值 还是 绝对值的和 最小?

■网友
可以。任意子段和都是两个前缀和之差,那么绝对值最小子段和就相当于前缀数组两两之差中绝对值最小者。求出前缀和数组,既然是整型,就用个桶排算法O(n)将其排序,然後O(n)遍历扫出相邻差最小的,即答案。
■网友
是想到一个nlogn的 先求出所有的前缀和 把前缀和排序 然后找出所有相邻两个数的差的最小值
■网友
额只想到O(nlogn)。想到了leetcode 327 Count of Range Sum那题,给定一个区间,求数组内有多少个子区间和在该范围内。这题应该类似,先不在意绝对值,将问题转化为只求最接近于零的子区间和。该问题在leetcode上面的解法总体来说有两种,一种是segment tree或bit,另一种是sum数组,二分查找,均是O(nlogn)的算法。


    推荐阅读