课堂测试-求子数组和最大值
2016-04-06 15:18
316 查看
设计思想:
1.首先设数组中的第一个数为最大值,循环从0开始,和相邻的数相加;
2.若得到的和大于最大值,则将和的值赋给最大值;
3.若得到的和小于0,则将和赋为0,相当于从下一个数开始下一次循环;若最大值小于当前值,则将当前值赋给最大值,以保证全为负数时的正确。
出现的问题:
最后求得的最大值没有计算负数,如 5 -1 3,得到的是8;
解决方案:
令数组第一个数为最大值,循环从0开始,即可解决问题。
源代码:
结果截图:
总结:
求子数组的和的最大值,首先要理解清楚子数组的概念;只能是相邻数之间组成。逻辑要更清楚一些,我添加了只有负数时的情况。
1.首先设数组中的第一个数为最大值,循环从0开始,和相邻的数相加;
2.若得到的和大于最大值,则将和的值赋给最大值;
3.若得到的和小于0,则将和赋为0,相当于从下一个数开始下一次循环;若最大值小于当前值,则将当前值赋给最大值,以保证全为负数时的正确。
出现的问题:
最后求得的最大值没有计算负数,如 5 -1 3,得到的是8;
解决方案:
令数组第一个数为最大值,循环从0开始,即可解决问题。
源代码:
import java.util.Scanner; public class Test2 { public static void main(String[] args){ int N=5; int list[]=new int ; //创建一个新数组 Scanner in=new Scanner(System.in); int i; System.out.println("请输入数组:"); for(i=0;i<N;i++) { list[i]=in.nextInt(); } max_ l=new max_(); System.out.print("子数组最大的和为: "+l.max_(list,N)); //调用函数 in.close(); } } class max_ { int max_(int list[],int length) { int i; int lmax=0; int max=list[0]; //设最大值为list[0] for(i=0;i<length;i++) { lmax+=list[i]; if(lmax>max||lmax==max) { max=lmax; } if(lmax<0)//若小于0,则从后一个数开始加和 { lmax=0; if(max<list[i]||max==list[i]) { max=list[i]; } } //若数组全为负数,求最大值 } return max; } }
结果截图:
总结:
求子数组的和的最大值,首先要理解清楚子数组的概念;只能是相邻数之间组成。逻辑要更清楚一些,我添加了只有负数时的情况。
相关文章推荐
- linux下环境部署
- iOS开发概述UIkit动力学
- 01背包问题
- INSTALL_FAILED_UID_CHANGED
- android Webview基本配置以及android与js交互
- 中华人民共和国公民身份证验证和计算方式
- 四则运算4最终版
- 计算机操作系统(一)发展与体系结构
- [BZOJ3504][CQOI2014]危桥(最大流)
- Prime Ring Problem
- Prime Ring Problem
- MyBatis学习总结(一)——MyBatis快速入门
- 极光推送(接收后台消息和自定义消息)
- XUtils===XUtils3框架的基本使用方法(一)
- 我把近视从600度直降到0度 作者:灵魂旗舰 谈谈治疗近视的雾视疗法
- win7下使用U盘安装centOS6.3双系统
- 四种常见的 POST 提交数据方式
- Python Twisted系列教程20: Twisted和Erlang
- iOS主要设备支持的视频格式
- Centos 6.7 安张nagios和cacti 并添加监控主机