【问题标题】:Max subarray - get output formatted correctly最大子数组 - 正确格式化输出
【发布时间】:2014-07-03 07:08:09
【问题描述】:

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

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]

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

谢谢,

附言一旦我把这部分写下来,找到一个总和最大的部分是一小步。

【问题讨论】:

    标签: ruby algorithm computer-science arrays


    【解决方案1】:

    我可能误解了您的问题,但您可能正在寻找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]
    

    【讨论】:

    • 是的,这很完美。谢谢!为什么一开始就嵌套它们?
    • 啊,好吧,我没有意识到它不应该放在首位。在此处查看您的线路:current_subarray &lt;&lt; subarrays[-1]。您正在将一个数组插入到现有数组中。如果您只是想合并它们,您可以将其更改为:current_subarray += subarrays[-1]。你也可以使用concat 方法,同样的事情。然后你可以完全避免flatten 电话,虽然这是很好的保险。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多