20 lines
490 B
Plaintext
20 lines
490 B
Plaintext
func maxsubseq(*a) {
|
|
var (start, end, sum, maxsum) = (-1, -1, 0, 0);
|
|
a.each_kv { |i, x|
|
|
sum += x;
|
|
if (maxsum < sum) {
|
|
maxsum = sum;
|
|
end = i;
|
|
}
|
|
elsif (sum < 0) {
|
|
sum = 0;
|
|
start = i;
|
|
}
|
|
};
|
|
a.ft(start+1, end);
|
|
}
|
|
|
|
say maxsubseq(-1, -2, 3, 5, 6, -2, -1, 4, -4, 2, -1);
|
|
say maxsubseq(-2, -2, -1, 3, 5, 6, -1, 4, -4, 2, -1);
|
|
say maxsubseq(-2, -2, -1, -3, -5, -6, -1, -4, -4, -2, -1);
|