题目
输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
数据范围:
1<=n<=10
−100<=a[i]<=100
要求:时间复杂度为 O(n),空间复杂度为 进阶:时间复杂度为 O(n),空间复杂度为 O(1)
思路
用tmp记录更新中的子数组的和,更新过程中不断和最大值比较,并且更新最大值,如果到某一个点i使得tmp+array[i]小于零,说明之前的子数组将不会产生贡献,将tmp重新置为0继续遍历。
代码
python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param array int整型一维数组
# @return int整型
#
class Solution:
def FindGreatestSumOfSubArray(self , array: List[int]) -> int:
# write code here
length = len(array)
tmp = 0
max_value = array[0]
flag = False
for i in range(length):
if(tmp + array[i] <0):
tmp = 0
else:
flag = True
tmp += array[i]
max_value = max(max_value, tmp)
if flag:
return max_value
return max(array)
c++版本:
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int length = array.size();
int max_value = array[0];
int tmp = 0;
bool flag = false;
for(vector<int>::iterator i=array.begin(); i<array.end(); i++){
if(tmp + *i<0){
tmp=0;
}else{
flag = true;
tmp += *i;
}
max_value = max_value>tmp ? max_value : tmp;
}
if(flag){
return max_value;
}else{
return *max_element(array.begin(), array.end());
}
return 0;
}
};