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;
	}
posted @ 2025-04-04 21:52  m1kasaz  阅读(44)  评论(0)    收藏  举报