求 $a_j-a_i$ 的最大值
给定一个整数数组 a[n]
,求 。要求时间复杂度为 ,空间复杂度为 。
这道题若没有最后的空间复杂度时间复杂度的要求,很简单,两层循环就能解决了。
这个题看似要使用动态规划,但仔细一想,不好弄,不能使用额外的存储空间。
比如假定前 个的解是 ,考虑第 个,若 到 之间有个很小的数 ,可以使得 比 大,同时也比 大。怎么弄?很难办。
退回原始问题,看着有点像求连续最大子数组之和。
想办法把 转化为 。这里我对使用下标使用有点随意。
我们构造如下数组:
那么连续最大子数组之和就是:
也就是说,通过构造一个数组,把原问题转化为了一个很容易解决的问题。
新构造的数据没有必要保存下来,只需要将处理连续最大子数组之和程序中 sum += a[i];
修改为 sum += (a[i] - a[i-1])
即可。