最大子数组和
理解题目:
题目要求找到给定整数数组中连续子数组的最大和。
代码实现:
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;
}
}
步骤解释:
-
初始化最大和
maxSum
和当前子数组和currentSum
为数组的第一个元素。 -
从数组的第二个元素开始遍历:
- 计算当前元素加入当前子数组后的和,如果当前元素本身比当前子数组和加上当前元素更大,则从当前元素开始构建新的子数组。
-
更新最大和为当前最大值。
-
返回最大和。
时间复杂度: 遍历数组一次,时间复杂度为 O(n)。
空间复杂度: 只使用了常数级别的额外空间,空间复杂度为 O(1)。