Kadane算法
情景:在子序列中找最值问题
状态转移方程:
\[\text{maxEndingHere}_i =
\begin{cases}
a[1] & \text{if } i = 1 \\
\max\left(a[i],\ \text{maxEndingHere}_{i-1} + a[i]\right) & \text{if } i > 1
\end{cases}
\]
\[\text{maxSoFar}_i =
\begin{cases}
a[1] & \text{if } i = 1 \\
\max\left(\text{maxSoFar}_{i-1},\ \text{maxEndingHere}_i\right) & \text{if } i > 1
\end{cases}
\]
//找最大值
int Kadane(int[] nums) {
//数组下标从1~n
int n = nums.length;
int maxEndingHere = nums[1];
int maxSoFar = nums[1];
for(int i = 2;i < n;i++) {
maxEndingHere = Math.max(maxEndingHere+nums[i], nums[i]);
maxSoFar = Math.max(maxSoFar, maxEndingHere);
}
return maxEndingHere;
}

浙公网安备 33010602011771号