用途
- 負の値も含みうる数値配列にて、隣接した部分和の最大値をO(N)で求める
- 読み方はカダネではなく、ケイデインズ
- 最大部分列和(maximum segment sum)と言われる
最大部分和問題
- Maximum subarray problem
- https://en.wikipedia.org/wiki/Maximum_subarray_problem
例1
1 2 3 -2 5の場合 answer : 9
例2
-2 1 -3 4 -1 2 1 -5 4 answer : 6
例3
-1 -2 -3 answer : -1
参考
https://ark4rk.hatenablog.com/entry/2018/01/08/002508
Quiz
https://practice.geeksforgeeks.org/problems/kadanes-algorithm/0/?ref=self
Submission
https://practice.geeksforgeeks.org/viewSol.php?subId=14333102&pid=106&user=peroon
Code
ll kadanes_algorithm(vector<ll> &A){ ll ans = A[0]; ll s = A[0]; FOR(i, 1, A.size()){ s = max(s + A[i], A[i]); chmax(ans, s); } return ans; }
動画
- 先頭から足していって、今までの和が負なら含めないほうがいいので切り離すのね
- Quiz https://leetcode.com/explore/featured/card/30-day-leetcoding-challenge/528/week-1/3285/
問題
- C - ソーシャルゲーム (Donuts2014)
- 累積和・累積MINで解いたけど、部分和だと気づけたらもっと早く解けた