仅当 min 位于数组的较低索引位置时才使用 .minmax 返回值

Posted

技术标签:

【中文标题】仅当 min 位于数组的较低索引位置时才使用 .minmax 返回值【英文标题】:Using .minmax to return values only when min is in lower index position of an array 【发布时间】:2015-11-05 08:47:54 【问题描述】:

有没有办法只返回最小值位于比最大值低的索引位置的数组的最小值/最大值?

例如,假设我们有:

array = [10, 12, 5, 3, 20, 1, 9]

如果我们对这个数组执行 .minmax,我们会得到以下结果:

array.minmax
=> [1, 20]

但是,我只对获取索引低于最大值的最小值感兴趣,在这种情况下:

=> [3, 20]

我一直在尝试不同的方法来做到这一点,但运气不佳。我试图找到一种方法来获取最小值/最大值,其中两者之间的差异返回负值,但找不到这样做的方法。

编辑:澄清一下,这本质上是为了选股。数组元素是每天股票的价格。我对最大化数组中的最小值/最大值之间的差异感兴趣(在股票 = 3 的那一天买入,在股票 = 15 的那一天卖出)。这些值可能不是绝对最小值或最大值。

【问题讨论】:

【参考方案1】:

我会尝试:

array[0..array.index(array.max)].minmax

所以只需将 minmax 应用于数组的第一个元素和最大值的索引之间的元素。

要返回索引值,只需使用 map 遍历 minmax 数组并在新数组中获取它们的索引:

array         = [10, 12, 5, 3, 20, 1, 9]
min_max_array = array[0..array.index(array.max)].minmax
min_max_index = min_max_array.map|v| array.index(v)

【讨论】:

这很简单,似乎正是我想要的。您是否碰巧知道这是否也允许返回所述值的索引位置? 如果最大值出现不止一次怎么办?对于[10, 12, 5, 3, 20, 1, 9, 20],您的解决方案将返回[3, 20] 而不是[1, 20] @scobo 您只需要定义是否希望找到的最大值是第一个或最后一个出现的最大值。您可以通过以下方式找到最后一次出现的索引:array.size - array.reverse.index(20) - 1 谢谢@DavidAldridge。像 array.rindex(array.max) 这样的操作似乎也可以,以防我们最初不知道数组中的值。 实际上,@DavidAldridge 我发现了一个问题。假设数组是array = [17,3,6,9,15,8,6,1,10]。这将返回 [17, 17] 而不是 [3, 15]

以上是关于仅当 min 位于数组的较低索引位置时才使用 .minmax 返回值的主要内容,如果未能解决你的问题,请参考以下文章

为啥较大搜索值的实际运行时间小于排序数组中的较低搜索值?

插入排序算法

MongoDB:带有数组的文本索引,只有第一个词被索引

仅当输入为数组时才将类调用为数组

MongoDb 仅当数组不为空时才在数组中添加字段

仅当应用程序在后台请求位置后进入前台时才调用 didUpdateLocations