子数组和最大值算法
程序设计思路:
有数组Array[10], 先设置两个变量sum和max,一个存贮子数组的和,一个存贮和的最大值,先令sum=Array[0] max=Array[0],然后用循环遍历数组的每一个数,如果sum+Array[1]> sum那么将sum更新为sum+Array[1],如果更新的sum大于max那么将max更新为sum。如果sum+Array[1]<0那么令sum=0,再往后查找别的子数组。如果sum+第二个数的值大于0小于sum,令sum=sum+Arrar[1]。
程序源代码:
1 public class Test2 { 2 public static void main(String args[]){ 3 int Array[]={0,1,5,-4,9,10,54,-6,-34,78}; 4 int max=Array[0]; 5 int sum=Array[0]; 6 for(int i=1;i<10;i++){ 7 if(sum+Array[i]>=sum){ 8 sum=sum+Array[i]; 9 if(sum>max){ 10 max=sum;} 11 } 12 else if(sum+Array[i]<0){ 13 sum=0; 14 } 15 else{ 16 sum=sum+Array[i]; 17 } 18 } 19 System.out.println("和最大的子数组的和为:"+max); 20 } 21 }
运行结果截屏:
问题分析:
在运算子数组和的时候,比较加上下一数据项和已存在子数组的和相比较,在和小于原盒的时候直接归零了,导致算出的和最大值有误!
即令sum+Array[i]<sum)直接使sum=0,出现错误
总结:
在写程序的时候应该先想好思路,想清楚算法,不然容易出现错误
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步