【发布时间】:2012-10-14 13:05:52
【问题描述】:
有一个整数数组,我必须找到长度为 K 且范围(子序列的max - min)小于等于 R 的序列数。长度为 k 的序列数与数量之间是否存在关系长度为 K-1 的序列
?
我正在尝试解决关于 SPOJ 的练习题。我不想要完整的解决方案,只需指出正确的方向/建议/提示。
我正在考虑使用类似双端队列的结构来将数组的最小和最大元素保持在一定的索引范围内。但是,当 k 更接近 n 时,这将变得接近 o(n*n) ,这太慢了,理想情况下,我正在研究 O(n) 解决方案或 O(n * log n) 解决方案。如果我可以使用递归/迭代关系计算 K=1 到 K=N 所需的值,那将是最好的,因为可能再次需要相同的答案
【问题讨论】:
-
请发布一个示例并定义“范围”是什么意思。
-
范围最有可能表示
max - min。 -
@IVlad:先生您是对的,范围是指所选序列的最大元素-最小元素
-
我没有答案,但尝试击败
O(N*N)的算法可能会很有趣,该算法只找到长度为K = N/2的合格范围的数量。然后也许这可以暗示解决完整问题的算法。 -
能否请您添加指向 SPOJ 的链接。
标签: c++ algorithm dynamic-programming