关于《编程之美》中“子数组之和的最大值”的探讨

本文介绍了一种解决《编程之美》中“子数组之和的最大值”问题的算法思路,并提供了一个具体的C语言实现示例。该算法考虑了数组中全是负数、全是正数以及混合情况下的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《编程之美》是一本很意思的讲编程的书,虽然有什么“面试心得”之说。下面是我对《编程之美》中“子数组之和的最大值”的一种解法,不知是否可行。以下为程序: //对于全为负的数组,求单个最大值即为答案,对于全为正的数组,数组所有元素之和为答案。 //对于有正有负的,数组的开始可分二种情形:以非正数开始,以正数开始,显然要丢掉开 //始的连续的非正数,另一端也如此。这样我们把数组简化成了如下情形:+......+ //s1表示左端连续正数之和,s2表示紧随s1后的连续非正数之和,s3表示紧随s2后的连续正数之和, //后面可以依此处理。 //问题简化成对(s1,s2,s3,s2,s3,......,s3)求子数组之和的最大值,其中s1>0,s2<0,s3>0。 //对于(s1,s2,s3当-s2 #define N 10 int max_array(int a[],int n) { int i,start,end,s1,s2,s3,count=0; for(i=0;is1) s1=a[i]; } else if(count==0) { s1=0; for(i=0;i=0&&i<=end;i++) s1+=a[i]; while(i<=end) { s2=0; while(a[i]<0&&i<=end) {s2+=a[i];i++;} s3=0; while(a[i]>=0&&i<=end) {s3+=a[i];i++;} if(-s2s3?s1:s3; else if(s1+s2>0) s1=s1+s2+s3; else s1=s3; } } return s1; } int main() { int array[N],max,i; for(i=0;i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值