ruby - 最大子数组 - 正确格式化输出

标签 ruby algorithm computer-science arrays

我正在尝试经典的最大子数组问题。我正在输出正确的数组,但我希望它的格式不同。这是我的代码:

def max_subarray(input)
  return input if input.length == 1

  max = 0
  subarrays = []

  input.each do |element|
    current_subarray = []
    if max + element > element
      current_subarray << subarrays[-1]
      current_subarray << element
      subarrays << current_subarray
      max += element
    else
      subarrays << [element]
      max = element
    end
  end

  subarrays.each do |s|
    print s
    puts ''
  end
end

max_subarray([-2, -3, 4, -1, -2, 1, 5, -3])

这给了我以下输出:

[-2]
[-3]
[4]
[[4], -1]
[[[4], -1], -2]
[[[[4], -1], -2], 1]
[[[[[4], -1], -2], 1], 5]
[[[[[[4], -1], -2], 1], 5], -3]

虽然这些是我想要的数字,但我希望它们成为每一行的一个数组。不是嵌套数组。有什么想法吗?

谢谢,

附注一旦我把这部分记下来,找到具有最大总和的部分就是一小步。

最佳答案

我可能误解了你的问题,但你可能正在寻找 flatten

...
subarrays.each do |s|
  print s.flatten
  puts ''
end
...

结果是:

(nick@monster)-(~/Desktop)
(504)⚡️ ruby derp.rb 
[-2]
[-3]
[4]
[4, -1]
[4, -1, -2]
[4, -1, -2, 1]
[4, -1, -2, 1, 5]
[4, -1, -2, 1, 5, -3]

关于ruby - 最大子数组 - 正确格式化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23668016/

相关文章:

ruby-on-rails - SQLite3::ConstraintException:列电子邮件不是唯一的

c++ - 带有功能支持的 Postfix 的中缀

algorithm - 排序:返回一个数组,其中包含每个元素的新位置

java - 为什么-127>>1的二进制表示是11000000?

algorithm - 关于 'O(N)' 类型内容的良好进修类(class)?

ruby-on-rails - Ruby on Rails : Access values from form in controller

ruby - 是否有在自定义类中启用散列式查找的方法?

python - 如何在不丢失 Python 中的堆属性的情况下删除堆中的特定元素?

javascript - 为什么我的剑道窗口会自己打开?

ruby - gsub!复制字符串的缓冲区?