Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,10 @@
|
|||
def subarray_sum(arr)
|
||||
max, slice = 0, [] of Int32
|
||||
arr.each_index do |i|
|
||||
(i...arr.size).each do |j|
|
||||
sum = arr[i..j].sum
|
||||
max, slice = sum, arr[i..j] if sum > max
|
||||
end
|
||||
end
|
||||
[max, slice]
|
||||
end
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
# the trick is that at any point
|
||||
# in the iteration if starting a new chain is
|
||||
# better than your current score with this element
|
||||
# added to it, then do so.
|
||||
# the interesting part is proving the math behind it
|
||||
def subarray_sum(arr)
|
||||
curr = max = 0
|
||||
first, last, curr_first = arr.size, 0, 0
|
||||
arr.each_with_index do |e, i|
|
||||
curr += e
|
||||
e > curr && (curr = e; curr_first = i)
|
||||
curr > max && (max = curr; first = curr_first; last = i)
|
||||
end
|
||||
return max, arr[first..last]
|
||||
end
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
[ [1, 2, 3, 4, 5, -8, -9, -20, 40, 25, -5],
|
||||
[-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1],
|
||||
[-1, -2, -3, -4, -5],
|
||||
[] of Int32
|
||||
].each do |input|
|
||||
puts "\nInput seq: #{input}"
|
||||
puts " Max sum: %d\n Subseq: %s" % subarray_sum(input)
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue