知识点:数组、
一、题目描述
例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,(子向量的长度至少是1)
二、思路分析
1、暴力法,穷举所有连续子序列,并计算子序列的和。返回最大连续子序列的和。
C++实现:
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
//暴力法,计算所有子序列的和,通过比较得最大值
int max = INT_MIN;
for(int i=0; i<array.size(); i++){
int sum = 0;
for(int j=i; j<array.size(); j++){
sum += array[j];
if(sum > max){
max = sum;
}
}
}
return max;
}
};
python:
# -*- coding:utf-8 -*-
class Solution:
def FindGreatestSumOfSubArray(self, array):
# write code here
max = array[0]
for i in range(len(array)):
sum = 0
for j in range(i,len(array)):
sum += array[j]
if max < sum:
max = sum
return max
2、贪心算法,同LeetCode53题
以数组array={2,3,-6,2,4}为例,从左向右迭代,一个个数字加过去,如果sum<0,重新开始找自序串。
C++:
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int sum = array[0];
int max = array[0];
for(int i=1; i<array.size(); i++){
if(sum < 0){
sum = 0;
}
sum += array[i]; // 重新开始找子序列,但max仍不变
//max += array[i];
if(sum > max){
max = sum;
}
}
return max;
}
};
python:
# -*- coding:utf-8 -*-
class Solution:
def FindGreatestSumOfSubArray(self, array):
#贪心法,从左向右迭代,一个个数字加过去,如果和小于0,重新开始找子序串
#初始化变量,maxSum为最大和,curSum为当前和
maxSum = array[0]
curSum = array[0]
#遍历所有元素,进行迭代求和
for each in array[1:]:#从第二个元素开始
#如果当前累加和小于等于0,则重新开始找子序列
if curSum <= 0:
curSum = 0
curSum += each#如果当前累计和小于等于0,即curSum = each,即从each开始重新找子序列
if curSum > maxSum:
maxSum = curSum
return maxSum