求最大子数组的和
1.设计思想:
从数组的第一个数开始依次相加,在上次相加的和为正数的情况下,如果下一个数正数,则最大子数组的和为二者相加;如果下一个数为负数,则最大子数组的和还是原来的取值。
如果上次相加的和为负数且下一个数为正数,就取下一个数的值为最大;如果下一个数也为负数,则比较选出大的那个作为最大子数组的和。
2.出现的问题,输入全为负数时,最大子数组的和为0
3.解决方案:将数组的第一个数赋值比较的第一个数
源代码:
package test; import java.util.Scanner; public class maxsum { public static void main(String[] args){ int N; Scanner in=new Scanner(System.in); System.out.println("请输入数组长度"); N=in.nextInt(); int i; int array[]=new int [N]; System.out.println("请输入数组:"); for(i=0;i<N;i++) { array[i]=in.nextInt(); } maxsum p=new maxsum(); System.out.print("子数组最大的和为: "+p.max(array,N)); } } class max { int max(int list[],int length) { int i; int maxss=list[0]; int max=list[0]; //设最大值为list[0] for(i=1;i<length;i++) { if(max+list[i]>=list[i]) { if(list[i]<0&&maxss<max+list[i]) maxss=max; max=max+list[i]; } else max=list[i]; } return max; } }
截图: