关于Java求最大子段和
public static int maxSubArray(int[] nums) {int maxSum = nums[0];int curSum = nums[0];for (int i = 1; i< nums.length; i++) {curSum = Math.max(nums[i], curSum + nums[i]);maxSum = Math.max(maxSum, curSum);}return maxSum;}public static void main(String[] args) {int[] nums = { -2, 1, -3, 4, -1, 2, 1, -5, 4 };int maxSum = maxSubArray(nums);System.out.println(maxSum); //输出6}
以上是用Java实现求最大子段和的代码段。算法思路是从数组的第一个数开始循环,不断更新当前子段和和最大子段和。如果当前子段和小于0,则将当前子段和更新为当前循环到的数,否则将当前子段和加上当前循环到的数更新为新的当前子段和。在每次更新当前子段和之后,将最终最大子段和更新为当前最大子段和和之前计算出来的最大子段和的较大值。最后返回最大子段和即可。
以数组{-2,1,-3,4,-1,2,1,-5,4}为例,循环过程如下:
i=0:maxSum=-2, curSum=-2i=1:maxSum=1, curSum=1i=2:maxSum=1, curSum=-2i=3:maxSum=4, curSum=4i=4:maxSum=4, curSum=3i=5:maxSum=4, curSum=5i=6:maxSum=6, curSum=6i=7:maxSum=6, curSum=1i=8:maxSum=6, curSum=5
第8次循环结束后,最大子段和为6,输出结果即可。