Ruby - 查找子阵列索引

时间:2014-02-12 16:34:07

标签: ruby arrays

我在寻找提取子阵列索引的方法时遇到了问题。

问题:从一个原始数组中找到具有最大值的子数组。

我的解决方案:查找正确的数组,但返回数组中的值。

我需要:max子阵列的起始索引和结束索引;例如:[2, 4]

我的代码:

def max_subarr(arr)
  (0...arr.length).inject([arr.first]) do |max_sub, i|
    (i...arr.length).each do |x|
      if max_sub.inject(:+) < arr[i..x].inject(:+)
        max_sub = arr[i..x]
      end
    end
    max_sub
  end
end

非常感谢任何帮助 - 请简要说明我做错了什么。我知道max_sub会返回arr[i..x]的值,但在我的生命中我不能只返回max_sub[i]max_sub[x]的索引值。

1 个答案:

答案 0 :(得分:0)

你想这样做:

indexes_arr = [2, 4]
range = Range.new(*indexes_arr)
arr[range]

<强>编辑:

为了获取代码中的索引,每次找到更大的子数组时都需要保存它们。

这是您编辑的代码:

def max_subarr(arr)
 start_index, end_index = 0, 0
 (0...arr.length).inject([arr.first]) do |max_sub, i|
  (i...arr.length).each do |x|
    if max_sub.inject(:+) < arr[i..x].inject(:+)
     max_sub = arr[i..x]
     start_index, end_index = i, x
    end
   end
   max_sub
 end
 return [start_index, end_index]
end



max_subarr([98, -99, 198, -2, 950])
=> [2,4]