题目:http://oj.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 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.
题目翻译:
找出一个数组中总和最大的连续子数组(至少含有一个数)。
例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],
连续子数组[4,-1,2,1]具有最大和 = 6。
更多练习:
如果你已经想出了O(n)的解法,请尝试使用更微妙的分治算法编码实现另一种解法。
分析:
注意第一个元素的处理。
C++实现:
class Solution {
public:
int maxSubArray(int A[], int n) {
// if(n == 1)
// {
// return A[0];
// }
int thisSum = A[0] > 0 ? A[0] : 0;
int maxSum = A[0];
for(int i = 1; i < n; ++i)
{
thisSum += A[i];
if(thisSum > maxSum)
{
maxSum = thisSum;
}
if(thisSum < 0)
{
thisSum = 0;
}
}
return maxSum;
}
};
Java实现:
public class Solution {
public int maxSubArray(int[] A) {
int thisSum = A[0] > 0 ? A[0] : 0;
int maxSum = A[0];
for (int i = 1; i < A.length; ++i) {
thisSum += A[i];
if (thisSum > maxSum) {
maxSum = thisSum;
}
if (thisSum < 0) {
thisSum = 0;
}
}
return maxSum;
}
}
Python实现:
class Solution:
# @param A, a list of integers
# @return an integer
def maxSubArray(self, A):
if(A[0] > 0):
thisSum = A[0]
else:
thisSum = 0
maxSum = A[0]
for num in A[1:]:
thisSum += num
if thisSum > maxSum:
maxSum = thisSum
if thisSum < 0:
thisSum = 0
return maxSum
感谢阅读,欢迎评论!