【发布时间】:2013-02-07 19:34:08
【问题描述】:
我有一个算法问题:
给定一个大小为 N 的数组(假设所有元素都是整数),找到最大的下降(不一定是连续的):max{array[i]-array[j]} 有一个约束:i>j。
简单的解决方案是两个循环,遍历i和j的所有可能值,但时间复杂度为O(n*n)。
我认为一个改进的解决方案是首先映射数组的索引,对数组进行排序并遍历数组以找到最大的下降。这个复杂度是 O(nlogn)。
有线性时间复杂度的解决方案吗?怎么做?
PS:我曾经想过一个线性的解决方案:创建两个额外的数组,一个是记录给定数组从头到尾的最大值,另一个是从尾到头的最小值。然后,经过两个数组一关。但是,有人认为这不正确并且占用了太大的空间。所以我想知道一个更好的解决方案。 ——李娟流
【问题讨论】:
-
啊,课程作业中的一个问题。你不应该更好地自己解决这个问题吗?
-
@arkascha:我曾经想过一个线性解决方案:创建两个额外的数组,一个是记录给定数组从头到尾的最大值,另一个是从头到尾记录最小值结束到开始。然后,通过两个数组一次。但是,有人认为这不正确并且占用了太大的空间。所以我想知道一个更好的解决方案。
-
你没有明白我的意思 ;-)
-
很难假设这个问题是针对家庭作业的。这是一个相对常见的编码挑战问题,也是展示巧妙算法设计如何显着提高运行时间的经典示例。