个人作业--数组

题目要求:求一个整数数组的子数组的和的最大值

                1.控制台输入一个整型数组,数组里有正数也有负数。

                2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

                3.求所有子数组的和的最大值。

解题思路:首先创建一个数组num[],然后接受控制台读取的数组值,把值存在数组中,然后把数组的第一个值付给rmax,随后进行循环比较,如果数组的第一个值为负,可以忽略,                  从正值开始计数,如果一个一个累加起来小于等于零,就重新开始复制,每次把最大值付给rmax,然后一次一次的刷新rmax,最后得出子数组的和的最大值。

出现问题:最开始的时候,没有把数组的第一个值付给max,导致如果数组全负,则结果为0,改正之后把数组第一个进行赋值,就可以刷新负值的最大值

package 数组;
import java.util.Scanner;
public class shuzu{
	static Scanner in=new Scanner(System.in);
public static void main (String[] args){
	int n;
	int num[]=new int[200];
	int max=0;
	int rmax=0;
	System.out.println("请输入数组个数");
	n=in.nextInt();
	System.out.println("请输入数组");
	for(int i=0;i<n;i++) {
		num[i]=in.nextInt();
	}
	rmax=num[0];
	for(int i=0;i<=n;i++) {
		if(max<=0) {
			max=num[i];
		}else {
			max+=num[i];
		}
		if(rmax<max) {
			rmax=max;
		}
	}
	

	 
	  System.out.println(rmax);
	

}
}
	

  

总结:对于刚看到这个题并且基础薄弱的我,一度连循环语句都不会写了,因此刚开始先查了java的循环语句,声明等等,然后自己卸了一个循环语句,但是却无法实现特殊子数组的最大和,只能实现最简单的求和,下课之后查询了其他大佬的代码,并能成功理解他们的算法思想,我用了一小时的时间一点点实践这个算法,虽然难理解,但是经过实践最终理解了,理解之后发现算法特别简单,本来我还想一点点循环得出结果,但是这个算法给了我很大的灵感,有些算法可以简化,是特别简单的,只是难理解,自己想不到,虽然我现在还特别菜,每次都需要理解别人的算法,但是我会理解之后重新写代码,这样一点点我相信会有进步的。

猜你喜欢

转载自www.cnblogs.com/ljm-zsy/p/10504593.html