子数组和最大值算法
2016-04-08 16:33
176 查看
程序设计思路:
有数组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]。
程序源代码:
运行结果截屏:
![](https://images2015.cnblogs.com/blog/761386/201604/761386-20160408162548437-642233912.png)
问题分析:
在运算子数组和的时候,比较加上下一数据项和已存在子数组的和相比较,在和小于原盒的时候直接归零了,导致算出的和最大值有误!
有数组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]。
程序源代码:
public class Test2 { public static void main(String args[]){ int Array[]={0,1,5,-4,9,10,54,-6,-34,78}; int max=Array[0]; int sum=Array[0]; for(int i=1;i<10;i++){ if(sum+Array[i]>=sum){ sum=sum+Array[i]; if(sum>max){ max=sum;} } else if(sum+Array[i]<0){ sum=0; } else{ sum=sum+Array[i]; } } System.out.println("和最大的子数组的和为:"+max); } }
运行结果截屏:
![](https://images2015.cnblogs.com/blog/761386/201604/761386-20160408162548437-642233912.png)
问题分析:
在运算子数组和的时候,比较加上下一数据项和已存在子数组的和相比较,在和小于原盒的时候直接归零了,导致算出的和最大值有误!
即令sum+Array[i]<sum)直接使sum=0,出现错误 总结: 在写程序的时候应该先想好思路,想清楚算法,不然容易出现错误
相关文章推荐
- MVC拦截器记录操作用户日志
- 汇编,浮点运算符,fldpi,fmul等指令说明。
- LeetCodet题解--23. Merge k Sorted Lists(合并K个已排序的链表)
- Windows系统中C#调用WinRAR来压缩和解压缩文件的方法
- 构建Spring Restful API请求参数解析
- Jquery 行选中背景色
- 解决requirejs某文件加载超时问题
- 利用微信平台作为飞利浦手机产品客服渠道的可行性调查
- jquery ui 的弹出窗体 dialog 高度会产生变化
- APICloud请你看英特尔智能硬件大赛决赛直播
- http://begin.lydsy.com/JudgeOnline/problem.php?id=2774(poi病毒)
- 一个简单的progressbar
- 数据库的图形化界面的安装
- 解决“U盘插入Ubuntu后文件只读且无法删除”问题
- curl与php
- linux之keepalived详解
- DWR的简单使用
- 二进制及十进制文件的读写方法
- 前端网(w3cfuns)
- jump game I // II