// 定义一个名为Solution的类
class Solution {
// 定义一个公共方法maxSubArray,接收一个整型数组nums作为参数,返回一个整数值
public int maxSubArray(int[] nums) {
// 如果输入数组只有一个元素,直接返回该元素,因为单个元素本身就是最长连续子数组
if (nums.length == 1){
return nums[0];
}
// 初始化sum为整型最小值,用于记录遍历过程中遇到的最大子数组之和
int sum = Integer.MIN_VALUE;
// 初始化count为0,用于记录从当前下标开始的累计和
int count = 0;
// 遍历输入数组的所有元素
for (int i = 0; i < nums.length; i++) {
// 将当前元素累加到累计和count中
count += nums[i];
// 更新sum为sum与count之间的较大值,这样每次循环都能得到以i为截止点的最大子数组之和
sum = Math.max(sum, count); // 取区间累计的最大值(相当于不断确定最大子序列终止位置)
// 当累计和count小于等于0时,说明从当前位置开始的累计和已经被负数拉低,不可能产生新的更大子数组
// 因此,将count重置为0,相当于重新选择下一个可能的最大子数组的起始位置
if (count <= 0){
count = 0; // 相当于重置最大子序列起始位置,因为遇到负数一定是拉低总和
}
}
// 遍历结束后,sum中存储的就是整个数组nums中的最大子数组之和
return sum;
}
}
这段代码实现了一个寻找整数数组中具有最大和的连续子数组的功能。通过动态计算并更新累计和count以及最大子数组之和sum,可以有效地在一次遍历中找到结果。