1. 问题描述
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
2. 解题思路
①核心思想:贪心算法
②求解局部最优
:某子数组的连续和一旦加上 num[i] 则立即变为负数,那么立即放弃当前子数组,从 num[i + 1] 开始进行新的子数组连续和计算。
③使用 temp_sum 暂存子数组的连续和,设置 max_sum 存储最终结果,在求解局部最优解的过程中不断更新 max_sum。
3. 代码实现
class Solution {
public int maxSubArray(int[] nums) {
// 数组中仅一个数
if (nums.length == 1){
return nums[0];
}
// 判空
if (nums == null || nums.length == 0){
return 0;
}
// 存放最终结果
int max_sum = nums[0];
// 暂存子数组的和
int temp_sum = 0;
for (int i = 0; i < nums.length; i++) {
temp_sum = temp_sum + nums[i];
// 更新子数组的最大和
if(temp_sum > max_sum) {
max_sum = temp_sum;
}
// temp_num 加上 nums[i] 一旦变为负数,则需要从 nums[i + 1]重新开始计算 temp_num
if(temp_sum < 0) {
temp_sum = 0;
}
}
return max_sum;
}
}