我在寻找提取子阵列索引的方法时遇到了问题。
问题:从一个原始数组中找到具有最大值的子数组。
我的解决方案:查找正确的数组,但返回数组中的值。
我需要: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]
的索引值。
答案 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]