Skip to content

最大子数组和

理解题目:

题目要求找到给定整数数组中连续子数组的最大和。

代码实现:

public class MaximumSubarray {
    // 最大子数组和
    public int maxSubArray(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }

        int maxSum = nums[0]; // 初始化最大和为第一个元素
        int currentSum = nums[0]; // 当前子数组和为第一个元素

        // 从第二个元素开始遍历数组
        for (int i = 1; i < nums.length; i++) {
            // 计算当前元素加入当前子数组后的和
            currentSum = Math.max(nums[i], currentSum + nums[i]);
            // 更新最大和
            maxSum = Math.max(maxSum, currentSum);
        }

        return maxSum;
    }
}

步骤解释:

  1. 初始化最大和 maxSum 和当前子数组和 currentSum 为数组的第一个元素。

  2. 从数组的第二个元素开始遍历:

  3. 计算当前元素加入当前子数组后的和,如果当前元素本身比当前子数组和加上当前元素更大,则从当前元素开始构建新的子数组。
  4. 更新最大和为当前最大值。

  5. 返回最大和。

时间复杂度: 遍历数组一次,时间复杂度为 O(n)

空间复杂度: 只使用了常数级别的额外空间,空间复杂度为 O(1)