【问题标题】:Given a sequence of N numbers ,extract number of sequences of length K having range less than R?给定一个 N 个数的序列,提取长度为 K 且范围小于 R 的序列数?
【发布时间】: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


【解决方案1】:

这是双端队列的完美应用。看我的回答here

您应该能够根据您的需求进行调整,几乎无需更改,为您提供O(N) 解决方案。

【讨论】:

  • :如果我必须从 K=1 到 K=N 计算这个值,那么复杂度会是多少。我可以使用什么算法?
  • @user1724072 如果对每个K 应用相同的算法,它将是O(n^2),因为固定K 的算法是O(N)。您想计算长度为1, 2, ..., N 且范围为<= R 的子串的数量吗?那是一个不同的问题,我建议您针对该问题打开另一个问题。
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 2018-04-17
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 2013-04-30
相关资源
最近更新 更多