题目:返回一个整数数组中最大子数组的和。
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)
发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。
发表时间截止到(2月28日)晚20:00。
设计思路:
(1)先创建一个数组,并输入数据(有正有负)
(2) 子数组的个数是连续的,按数组长度对数组进行划分
(3)开始计算,从第二个开始加上第一个,如果大小大于它本身,就分到一个子数组,然后第三个加上前两个,如果大于它本身就保留,划分到一个子数组;如果小于它本身就舍弃前面的值,并继续重复此操作,直到数组遍历一遍
注意:要求时间复杂度为O(n)所以只能遍历一遍
代码:
package text; import java.util.Scanner; public class Maxsz { public static void main(String[] args) { int a[]=new int [100]; int i; Scanner in=new Scanner(System.in); System.out .println("请输入数组的个数"); int n=in.nextInt(); for(i=0;i<n;i++) { a[i]=in.nextInt(); } int max=0; for(i=1;i<n;i++) { if(a[i]+a[i-1]>a[i]) { a[i]=a[i]+a[i-1]; if(a[i]>max)max=a[i]; } } System.out.println("子数组的最大值为:"+max); } }
结果截屏: