LeetCode---Maximum Subarray

来源:互联网 发布:什么是物联网大数据 编辑:程序博客网 时间:2024/06/15 21:28

Maximum Subarray:

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],

the contiguous subarray [4,−1,2,1] has the largest sum =6

题目要求:

找到一个数组中的连续子数组,使得子数组拥有最大的和,并返回最大和。

例:给定一个数组[-2,1,-3,4,-1,2,1,-5,4],则连续子数组[4,-1,2,1]使得和最大为:6

解题思路:

我们可以定义一个局部和:cursum以及一个全局和:maxsum, 我们将第一个数依次加上后面的,记录局部和的同时更新全局和。

Solution:

第一次:

public class Solution {    public int maxSubArray(int[] A) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.                int maxsum = A[0];        for(int i=0;i<A.length;i++)        {            int thissum = 0;            for(int j=i;j<A.length;j++)            {                thissum+=A[j];                if(thissum>maxsum)                maxsum = thissum;            }        }        return maxsum;    }}
但是时间上超了,显然,这是一种笨方法,继续改进:

第二次:

public class Solution {    public int maxSubArray(int[] A) {        int maxsum=A[0];        int cursum=A[0];        int i;        for(i=1;i<A.length;i++)        {            cursum = cursum<0 ? A[i]:A[i]+cursum;            maxsum = maxsum>cursum ? maxsum : cursum;        }        return maxsum;    }}




0 0