diff --git a/paradigm/kadane.cpp b/paradigm/kadane.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8ad7c719b27f5370dd75c30218a753f716c5c09b --- /dev/null +++ b/paradigm/kadane.cpp @@ -0,0 +1,31 @@ +/** + * Kadane + * + * Complexity (Time): O(n + m) + * Complexity (Space): O(n + m) + */ + +int v[MAX]; + +int kadane() { + // Maximum so far (msf), Maximum ending here (meh). + int msf = -0x3f3f3f3f, meh = 0; + int start = 0, end = 0, s = 0; + + for (int i = 0; i < n; ++i) { + meh += v[i]; + + if (msf < meh) { + msf = meh; + start = s; + end = i; + } + + if (meh < 0) { + meh = 0; + s = i + 1; + } + } + + return msf; +}