标签:leetcode
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 式子为:
dp[i] = dp[i-1] > 0?(A[i] + dp[i-1]):A[i]
然后迭代更新最大值就好。(会不会觉得 python 的实现写得很不一样?)
C++:
class Solution {
public:
int maxSubArray(int A[], int n) {
int ans = A[0];
int *dp = new int[n];
dp[0] = A[0];
for(int i = 1;i < n;++i)
{
dp[i] = dp[i-1]>0?(A[i] + dp[i-1]):A[i];
if(dp[i] > ans)
ans = dp[i];
}
return ans;
}
};
Python:
class Solution:
# @param A, a list of integers
# @return an integer
def maxSubArray(self, A):
ans = A[0]
n = len(A)
for i in range(1,n):
if A[i-1] > 0:
A[i] = A[i-1] + A[i]
if A[i] > ans:
ans = A[i]
return ans
标签:leetcode
原文地址:http://blog.csdn.net/jcjc918/article/details/43900427