summaryrefslogtreecommitdiff
path: root/math/maxTeilfeld.cpp
blob: bbafa3f3b238ee4fd372d66bc034079e050d62a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// N := Länge des Feldes.
// Laufzeit: O(N)
int maxStart = 1, maxLen = 0, curStart = 1, len = 0;
double maxValue = 0, sum = 0;
for (int pos = 0; pos < N; pos++) {
	sum += values[pos];
	len++;
	if (sum > maxValue) { // Neues Maximum.
		maxValue = sum; maxStart = curStart; maxLen = len;
	}
	if (sum < 0) { // Alles zurücksetzen.
		curStart = pos +2; len = 0; sum = 0;
	}
}
// maxSum := maximaler Wert, maxStart := Startposition, maxLen := Länge der Sequenz