On Jul 15, 2007, at 20:19 , Jesse Merriman wrote: > Not to be the downer who points out everyone's problems, but here's > a bug: No problem at all! Thanks for taking a look at my work :) > irb(main):008:0> arr = [46, -8, 43, -38, -34, -14, 10, -26, -9, > -19, -36, -6, > -20, -4, -23, -25, 48, -22, 22, 5, -21, -33, > 37, 39, > -22, 11, -44, -40, -37, -26] > irb(main):009:0> arr.max_sub_array > => [37, 39, 10] This should be a bit more pleasing :) irb(main):002:0> arr = [46, -8, 43, -38, -34, -14, 10, -26, -9, -19, -36, -6, -20, -4, -23, -25, 48, -22, 22, 5, -21, -33, 37, 39, -22, 11, -44, -40, -37, -26] irb(main):005:0> arr.max_sub_array => [46, -8, 43] Updated code follows below signature: Michael Glaesemann grzm seespotcode net class Array def max_sub_array return [] if self.empty? self.max_sub_arrayr[0] end def max_sub_arrayr ary = self.clone sub_ary = Array.new.push(ary.shift) sum = sub_ary[0] max_sub_ary = sub_ary.dup max_sum = sum done = false ary.each_with_index do |n,i| if sum > 0 if sum + n > 0 sum += n sub_ary.push(n) else sub_ary, sum = ary.dup.slice(i..(ary.size-1)).max_sub_arrayr done = true end elsif sum <= n sub_ary, sum = ary.dup.slice(i..(ary.size-1)).max_sub_arrayr done = true end if sum > max_sum max_sum = sum max_sub_ary = sub_ary.dup end break if done end return max_sub_ary, max_sum end end