一、题目概述
二、思路方向
这个问题是一个经典的算法问题,称为“最大子序和”(Maximum Subarray Problem)。解决这个问题的一个高效方法是使用“Kadane's Algorithm”,它只需要遍历数组一次,就能在 O(n) 时间复杂度内找到最大子序和。
三、代码实现
public class Solution {
public int maxSubArray(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int maxSoFar = nums[0]; // 迄今为止找到的最大子数组的和
int currentMax = nums[0]; // 到目前为止包含最后一个元素的最大子数组的和
for (int i = 1; i < nums.length; i++) {
// 我们想要 currentMax 保留包含 nums[i] 的最大子数组的和
// 如果加上 nums[i] 使得 currentMax 更大,则加上它
// 否则,我们从头开始,只考虑 nums[i]
currentMax = Math.max(nums[i], currentMax + nums[i]);
// 更