【发布时间】:2015-07-04 11:09:15
【问题描述】:
我有一个大数组,其中值在长子序列中单调上下(没有关系)(这样的序列可以是任意数量和任意大的大小,当然还有 > 2 个项)。
小规模示例:
1 2 3 4 5 9 7 4 3 -2 -5 -7 3 5 34 56 67 78 89 90 8 6 2 -4 -5 ...
等等。
我有兴趣找到任何(只是1,不是全部)结束递增序列的值以及新递减序列开始的位置。
最好的方法是什么?复杂性是多少?
(我的直觉认为这可能类似于二进制搜索,所以我猜测 O(logN),但不确定这是否正确)
【问题讨论】:
-
单调上升是指严格上升还是可以像1、3、3、5一样重复输入?另外,您为什么明确提到这些子序列是“长的”?您是否有任何启发式方法来了解它们中的每一个发生多长时间的频率?否则这不会有任何区别。在一般情况下,我认为你无法避免线性运行时间来解决这个问题。
-
是的,严格递增或递减,而且通常很长(例如,几十万个词,当然超过 2 个词,没有关系)。
标签: arrays search sequence binary-search