返回一个整数数组中最大子数组的和(一)
题目要求:返回一个整数数组中最大子数组的和
具体要求:输入一个整形数组,数组里有正数也有负数;
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
求所有子数组的和的最大值。要求时间复杂度为O(n);
设计思路:
(1)分别读入数组长度length、数组元素a[]
(2)引入sum求元素累加和,maxsum标记最大子数组和
(3)将元素依次累加:若求和,小于0,重置sum;若求和大于summax,summax=max;
(4)若sum和与maxsum的值均为0,说明数组元素全为非正整数,最大子数组即为最大元素
package kehouzuoye; import java.util.*; public class onetwo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入数组长度:"); int length = sc.nextInt(); int[] a = new int[length]; for(int i=0;i) { a[i] = sc.nextInt(); } int maxsum=0,sum=0; for(int i=0;i ) { sum = sum + a[i]; if(sum<0) sum=0; if(sum>maxsum) maxsum = sum; } if(maxsum==0) { maxsum=a[0]; for(int i=1;i ) { if(a[i]>maxsum) maxsum=a[i]; } } System.out.println("最大子数组的和为:" + maxsum); } }
源代码:
效果图: