53. 最大子数组和

image

53. 最大子数组和

思路

  1. 定义一个变量 currentSum 表示以当前元素结尾的最大子数组和。

  2. 遍历数组时,对于每个元素 nums[i],我们有两种选择:

    • 将其加入前面的子数组(前提是前面的 currentSum > 0)。
    • 从当前元素重新开始一个新的子数组(如果前面的 currentSum <= 0,说明前面的部分拖累了总和)。
  3. 使用一个变量 maxSum 记录遍历过程中的最大值。

复杂度分析

  • 时间复杂度: O(n)
    只需要遍历一次数组,每个元素只访问一次。
  • 空间复杂度: O(1)
    只使用了两个额外变量 currentSummaxSum,不依赖于输入数组大小。

代码

class Solution {
    public int maxSubArray(int[] nums) {
		// 初始化
        int currentSum = nums[0];
        int maxSum = nums[0];
		// 从第二个元素开始
        for (int i = 1; i < nums.length; i++) {
			// 如果加入当前元素后,和更小,直接从当前元素开始重新统计
            currentSum = Math.max(nums[i], currentSum + nums[i]);
            maxSum = Math.max(currentSum, maxSum);
        }
        return maxSum;
    }
}
posted @ 2025-08-08 23:26  quanht  阅读(7)  评论(0)    收藏  举报