【发布时间】:2016-10-09 01:13:51
【问题描述】:
我所指的问题类似于this one。唯一的区别是 1.) 从当前元素到我们选择的最近的较小元素应该有至少“k”个单位的距离。 2.) 可以从任一方向、向左或向右拾取元素。例如,如果 k=4 并且在当前元素旁边有一个较小的元素,我们不能选择它,因为它太靠近了。
我尝试以与其他解决方案相同的方式实现它。我所做的更改是,每次从堆栈中删除一个元素时,如果它实际上小于当前元素但仅仅因为它比 k 个单位更近而被删除,那么一旦我找到答案,我就会将该元素添加回堆栈当前元素,然后移动到下一个元素。这似乎可行,但我确信有更有效的方法来解决这个问题。任何建议都会非常有帮助。
【问题讨论】:
-
你的距离是标量还是方向?例如。在 [1, 0, 3, 1] 中距离为 1 的 3 的最近最小元素是前面的 0 还是后面的 1?距离-1呢?
-
解决链接的问题,然后在回答查询之前将k添加到每个查询的索引中。
-
@le_m 距离的方向无关紧要。它可以在左边或右边。在您的情况下,您可以选择 0 或 1。
-
@j_random_hacker 我认为这行不通。当您将 k 添加到查询中时,您会找到具有不同值的完全不同元素的答案。
-
@HarshaReaper "唯一的区别是......" - 显然有两个区别,1. 最小距离 k 和 2. 你想找到最近的更小的元素在两个方向上,与仅执行前向遍历的链接问题相反。正确的?如果是,请更新您的问题。
标签: algorithm