Maximal Subarray
Given an unsorted array s[0:n], find a subarray s[i:j] that maximize sum(s[i:j]).
sum(s[i:j]) equals to sum(s[0:j]) - sum(s[0:i-1]), in which sum(s[0:j]) is a fixed value when j is known. Hence maximizing sum(s[i:j]) becomes minimize sum(s[0:i-1]), where i-1 < j.
Therefore we need sum(s[0:i]), and the minimum subarray min(s[0:k]) where k < i to calculate max(s[i:j]).
1 | sum(s[0:i]) = s[0:i] |
Minimal Subarray
Similar idea but we need to keep the minimal s[0:k].