题目:
给定一个整数数组 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;
}
笔者也在不断学习,如有错误,欢迎指正!