leetcode-53. Maximum Subarray

来源:互联网 发布:网络营销商劫持网络 编辑:程序博客网 时间:2024/05/18 03:06

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;    }}
0 0
原创粉丝点击