LeetCode之Maximum Subarray

Maximum Subarray的通过率居然这么高,我提交了几次都是Wrong Answer,郁闷!

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.

More practice:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

1, 最简单最容易想的办法是两重循环遍历, 不过显然将会是Time Limit Exceeded.

int maxSubArray(int A[], int n)
    {
        int max = A[0];

        for(int i = 0; i < n; ++i)
        {
            int sum = A[i];
            for(int j = i + 1; j < n; ++j)
            {
                sum += A[j];
                if(sum > max)
                    max = sum;
            }
        }

        return max;
    }

2, 分治法

int recursiveMaxSubArray(int A[], int left, int right)
{
	if(left == right)return A[left];
	if(left == right-1)return max(max(A[left], A[right]), A[left]+A[right]);

	//divide
	int mid = (left + right)/2;
	int lmax = recursiveMaxSubArray(A, left, mid-1);
	int rmax = recursiveMaxSubArray(A, mid+1, right);

	//the max is [i..mid..j]
	int mmax = A[mid];

	for(int j = mid + 1, sum = mmax; j <= right; ++j)
	{
		sum += A[j];
		if(sum > mmax)
			mmax = sum;
	}

	for(int j = mid - 1, sum = mmax; j >= left; --j)
	{
		sum += A[j];
		if(sum > mmax)
			mmax = sum;
	}

	return max(max(lmax, rmax), mmax);
}

int maxSubArray(int A[], int n)
{
	return recursiveMaxSubArray(A, 0, n-1);
}

3, 算法

Kadane‘s algorithm:
containing at least one positive number

Ref.

1, http://en.wikipedia.org/wiki/Maximum_subarray_problem

2, http://blog.csdn.net/joylnwang/article/details/6859677.

Lemma 1: Suppose A[i...j] is the max subarray, then sum(A[i...k]) >= 0, where i <=k < j.

Proof. If sum(A[i...k]) < 0, then sum(A[k+1...j]) > sum(A[i...j]), contradiction.

 int maxSubArray(int A[], int n)
    {
        int max = A[0], sum = 0;
        for(int i = 0; i < n; ++i)
        {
            sum += A[i];
            if(sum > max)
                max = sum;
            if(sum <= 0)
                sum = 0;
        }
        return max;
    }

LeetCode之Maximum Subarray

时间: 2024-09-30 14:38:08

LeetCode之Maximum Subarray的相关文章

【LeetCode】 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. More practice: If you have figu

Leetcode 动态规划 Maximum Subarray

正整数或一位小数或者俩位小数的正则表达式的写法 ^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$ Leetcode 动态规划 Maximum Subarray,布布扣,bubuko.com

[LeetCode][JavaScript]Maximum Subarray

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. https://leetcod

LeetCode 53. 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. click to show more practice. Mor

41. leetcode 53. Maximum Subarray

53. 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. 思路:这个题还挺经典

【leetcode】Maximum Subarray (53)

1.   Maximum Subarray (#53) 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 s

leetCode 53.Maximum Subarray (子数组的最大和) 解题思路方法

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. click to show

leetcode-Maximum Subarray

https://leetcode.com/problems/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 l

【LeetCode】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. 思路: 很直接的最长上升子序列,线性 dp, dp 式