我有一个数组,其中包含我正在处理的值(按特定顺序),如下所示:
myArray = [3,6,5,6,2,1]
我需要评估数组中的元素并确定要复制的元素的数量。
规则是:我需要复制那些元素之和不大于前一个元素的元素。
我可以这样表达:
if myArray[-3] > (myArray[-2] + myArray[-1])
elements_to_copy = [myArray[-2],myArray[-1]]
else
elements_to_copy = [myArray[-1]]
end
感觉非常糟糕,因为我无法弄清楚如何使它作为一个迭代函数工作,这样我就可以继续上行直到比较失败。
有人可以帮忙吗?
答案 0 :(得分:1)
myArray = [3,5,6,2,1]
i = 0
myArray.reverse.inject do |sum, cur|
break if cur < sum
i -= 1
sum + cur
end
要复制的范围是i..-1
。
答案 1 :(得分:0)
elements_to_copy = []
array = myArray.reverse
array.each_with_index do |item, index|
if array.values_at[0..[index-1,0].max].sum <= item
elements_to_copy << item
end
end
如果我理解正确的话,应该这样做。