您的位置:首页 > 其它

leetcode-53. Maximum Subarray

2017-05-14 09:36 330 查看
https://leetcode.com/problems/maximum-subarray/#/description

问题描述:给定一个序列,求最长子串使其和最大。

思路解析:两种方法。一种就是常规,另一种DP,当指针i指向该元素值时,将该元素之前的和保存在数组中,然后判断,dp[i-1]是否小于0,若小于0,则将将其逻辑上重置0,加nums[i],如下:

dp[i]=nums[i]+(dp[i-1]>0?dp[i-1]:0);

代码如下:

public class Solution {
public int maxSubArray(int[] nums) {

int[] dp=new int[nums.length];

dp[0]=nums[0];

int max=dp[0];

for(int i=1;i<nums.length;i++)
{
dp[i]=nums[i]+(dp[i-1]>0?dp[i-1]:0);
max=Math.max(max,dp[i]);

}

return max;

}
}


另一种常规解法:

public class Solution {
public int maxSubArray(int[] nums) {

int max=Integer.MIN_VALUE;

int sum=0;

for(int i=0;i<nums.length;i++)
{
if(sum<0)
{
sum=nums[i];
}else
{
sum+=nums[i];
}

if(sum>max)
{
max=sum;
}

}

return max;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode