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

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

例如,假设我们有:

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

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

array.minmax
=> [1, 20]

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

=> [3, 20]

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

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

【问题讨论】:

    标签: arrays ruby minmax


    【解决方案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]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多