您的位置:首页 > 其它

课堂测试-求子数组和最大值

2016-04-06 15:18 316 查看
设计思想:

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;
}
}


结果截图:









总结:

求子数组的和的最大值,首先要理解清楚子数组的概念;只能是相邻数之间组成。逻辑要更清楚一些,我添加了只有负数时的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: