【发布时间】:2016-08-29 03:14:19
【问题描述】:
我正在尝试用 O(nlogn) 时间找出一个分而治之的算法来解决以下现实世界问题 -
假设我们有一组股票价格。想出一个算法,打印出一个数组,该数组中每天 i 的利润最大。
例如,如果我们有数组 A = [4,6,2,1],我们的天数将代表每个索引,我们的输出将是一个值为 [2,-4,-1,-1 ],最后一天的值为 -A[i]。
我想出了一个蛮力算法 -
1.) Scans the array for max after A[i]
2.) Subtracts A[i] with max, places value in A', iterates to next day
3.) When max reaches itself, repeat steps 1 & 2
4.) When you reach the end, the value is -A[i], return
另外,如果上述算法的时间复杂度是 o(n) 或 o(n^2),我会感到困惑。算法中最大的成本是找到最大值,其他的都是 o(1)。
有人可以帮帮我吗?谢谢
【问题讨论】:
-
您可以在线性时间内完成此操作。尝试在一次反向遍历数组中获取您需要的所有信息。
-
我不明白,从头开始,并不断减去值以找到每个特定日期的每个最大利润?
标签: arrays algorithm time-complexity brute-force divide-and-conquer