1.计算Maximum Subarray之元素总和,至少取一个元素:
<span style="font-size:14px;">int a[10] = {1, 2, -6, 3, -2, 4, -1, 3, 2, -4};
int maximum_subarray(){
int max_sum = -1e9, sum = 0;
for (int i=0; i<10; ++i){
// 先前累积的不是负数,加了就更大。
if (sum>0) sum+=a[i];
// 先前累积的若是负数,宁可不加。
else sum=a[i];
// 随时记录最大值
if (sum > max_sum) max_sum = sum;
}
return max_sum;
}
</span>
找出Maximum Subarray最左边的位置
<span style="font-size:14px;">int a[10] = {1, 2, -6, 3, -2, 4, -1, 3, 2, -4};
int maximum_subarray(){
int max_sum=-1e9, sum=0;
int start=0, end=0, temp_start=0;
for(int i=0; i<10; ++i)
{
if(sum>0)
sum+=a[i];
else{
sum=a[i];
temp_start=i;//重新设定一个起点
}
if(sum>max_sum){
max_sum=sum;
start=temp_start;
end=i;
}
}
cout << "從" << start << "到" << end;
return max_sum;
}
</span>
2.计算Maximum Subarray之元素总和,可以一个元素都不取:
<span style="font-size:14px;">int a[10] = {1, 2, -6, 3, -2, 4, -1, 3, 2, -4};
int maximum_subarray(){
int max_sum = 0, sum = 0;
for(int i=0; i<10; ++i){
sum+=a[i]; // 累积总和
if(sum<0) sum=0; // 零总比负数好
// 随时记录最大值
if(sum>max_sum) max_sum=sum;
}
return max_sum;
}
</span>
找出Maximum Subarray最左边的位置
<span style="font-size:14px;">int a[10] = {1, 2, -6, 3, -2, 4, -1, 3, 2, -4};
int maximum_subarray(){
int max_sum=0, sum=0;
int start=0, end=0, temp_start=0;
for(int i=0; i<10; ++i)
{
sum+=a[i];
if(sum<0){
sum = 0;
temp_start = i+1; // 重新设定起点是下一个数字
}
if(sum>max_sum){
max_sum=sum;
start=temp_start;
end=i;
}
}
if(start==0&&end==0)
cout<<"什么数字都不取";
else
cout<<"从"<<start<<"到"<< end;
return max_sum;
}
</span>