题目:
思路:
动态规划
对于这个题,必须要是连续的子数组,所以我们需要判断的是要么当前dp[i]为num[i]和之前的dp[i-1]组成一个数组,要么dp[i] =num[i]组成一个新的数组
优化前:
class Solution {
public int maxSubArray(int[] nums) {
//从前到后
//先对dp数组初始化
int n = nums.length;
int[] dp =new int[n];
if(nums.length==0) return nums[0];
dp[0] = nums[0];
for(int i =1; i<n;i++){
//要么跟前面联合起来,要么自己自称一派
dp[i] = Math.max(nums[i],nums[i]+dp[i-1]);
}
//对于每一个dp[i]都需要进行比较
int res = Integer.MIN_VALUE;
for(int i =0;i<n;i++){
res = res>dp[i]?res:dp[i];
}
return res;
}
}
优化后:
class Solution {
public int maxSubArray(int[] nums) {
//从前到后
//先对dp数组初始化
int n = nums.length;
if(nums.length==0) return 0;
int dp0= nums[0];
int dp1 = 0;
int res = dp0;
//刚开始的状态是dp0的状态
//dp[i]只和上一个状态dp[i-1]有关
for(int i = 1;i<n;i++){
dp1 = Math.max(nums[i],nums[i]+dp0);
dp0 = dp1;
res = Math.max(res,dp1);
}
return res;
}
}
标签:最大,nums,int,res,dp0,数组,dp 来源: https://blog.csdn.net/weixin_45802793/article/details/122396604
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。