题目:
解答:
分两种情况分别考虑,第一种情况,全是非正数,直接遍历取最大值,第二种情况,有正数,使用标记数值,取范围值之和。
代码:
class Solution {
public:
int maxSubArray(vector<int>& A) {
int temp = 0,max = 0;
int flag = 1;
int n = A.size();
for( int i = 0;i < n;i++ )
if( A[i] > 0 ){
flag = 0;
break;
}
if( flag ) {
max = A[0];
for( int i = 1;i < n;i++ )
if( max < A[i] )
max = A[i];
return max;
}
for( int i = 0;i < n;i++ ) {
if( A[i] > 0 ) {
temp += A[i];
max = max > temp ? max : temp;
}
else if( temp + A[i] > 0 )
temp += A[i];
else
temp = 0;
}
return max;
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)