Skip to content

Instantly share code, notes, and snippets.

@bcjordan
Forked from mpenkov/mcs.html
Last active December 27, 2015 12:39
Show Gist options
  • Select an option

  • Save bcjordan/7326735 to your computer and use it in GitHub Desktop.

Select an option

Save bcjordan/7326735 to your computer and use it in GitHub Desktop.
<html>
<head>
<title>Max Consecutive Sum</title>
</head>
<body>
Enter some integers:
<input type="text" id="txtInput" value="-1 5 6 -2 20 -50 4"></input>
<button onClick="btnOnClick();">Calculate</button>
<p>
Max consecutive sum is: <span id="divResult"></span>
</p>
<script>
function maxConsecutiveSum(numbers) {
var start = 0;
var end = 1;
var pos = 0;
var neg = 0;
if (numbers[0] > 0) {
pos += numbers[0];
} else {
neg -= numbers[0];
}
var max_sum = 0;
while (true) {
if (pos - neg > max_sum) {
max_sum = pos - neg
}
if (pos < neg) {
if (numbers[start] > 0) {
pos -= numbers[start];
} else {
neg += numbers[start];
}
++start;
continue;
}
if (end == numbers.length) {
break;
}
if (numbers[end] > 0) {
pos += numbers[end];
} else {
neg -= numbers[end];
}
++end;
}
return max_sum;
}
function btnOnClick() {
var txtInput = document.getElementById("txtInput");
var integers = txtInput.value.split(" ");
for (var i = 0; i < integers.length; ++i) {
integers[i] = parseInt(integers[i]);
}
var maxSum = maxConsecutiveSum(integers);
var divResult = document.getElementById("divResult");
divResult.innerHTML = maxSum;
}
</script>
</body>
</html>
def max_consecutive_sum(numbers):
"""Returns the maximum consecutive sum from the specified numbers."""
assert len(numbers)
start = 0
end = 1
pos = numbers[0] if numbers[0] > 0 else 0
neg = -numbers[0] if numbers[0] < 0 else 0
max_sum = 0
while True:
if pos - neg > max_sum:
max_sum = pos - neg
if pos < neg:
if numbers[start] > 0:
pos -= numbers[start]
else:
neg += numbers[start]
start += 1
continue
if end == len(numbers):
break
if numbers[end] > 0:
pos += numbers[end]
else:
neg -= numbers[end]
end += 1
return max_sum
def main():
import sys
numbers = map(int, sys.argv[1:])
print max_consecutive_sum(numbers)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment