题目:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
思路:
动态规划
- 这道题很明显可以使用动态规划来做,可以设置一个
数组dp[],每个位置的值保存的是当前情况下的最大值 - 设置一个变量
res存储最终结果,每次遍历一个数,如果dp[i-1]>0,那么就将当前位置的dp[i] = dp[i - 1] + nums[i],否则dp[i] = nums[i],每次比较之后更新res'的值,最后返回结果即可
以下为代码+注释:
public int maxSubArray(int[] nums) {
// 动态规划
// 定义一个dp数组
int[] dp = new int[nums.length];
// 初始化首位
dp[0] = nums[0];
// 将res变量初始化为第一个值
int res = dp[0];
for(int i = 1; i < nums.length; i++){
// 如果前一个>0说明可以加,增大结果
if(dp[i - 1] > 0){
dp[i] = nums[i] + dp[i - 1];
}else{
// 否则就不想加
dp[i] = nums[i];
}
// 每遍历一个就更新res
res = Math.max(res, dp[i]);
}
return res;
}
笔者也在不断学习,如有错误,欢迎指正!
本文介绍了一种求解最大子数组和问题的有效方法——动态规划。通过设置dp数组跟踪最大值并用变量res记录全局最大值,实现了一次遍历即可找出具有最大和的连续子数组。
369

被折叠的 条评论
为什么被折叠?



