题目要求:求一个整数数组的子数组的和的最大值
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的循环语句,声明等等,然后自己卸了一个循环语句,但是却无法实现特殊子数组的最大和,只能实现最简单的求和,下课之后查询了其他大佬的代码,并能成功理解他们的算法思想,我用了一小时的时间一点点实践这个算法,虽然难理解,但是经过实践最终理解了,理解之后发现算法特别简单,本来我还想一点点循环得出结果,但是这个算法给了我很大的灵感,有些算法可以简化,是特别简单的,只是难理解,自己想不到,虽然我现在还特别菜,每次都需要理解别人的算法,但是我会理解之后重新写代码,这样一点点我相信会有进步的。