返回一个整数数组中最大子数组的和(一)
题目要求:返回一个整数数组中最大子数组的和
具体要求:输入一个整形数组,数组里有正数也有负数;
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
求所有子数组的和的最大值。要求时间复杂度为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<length;i++) {
a[i] = sc.nextInt();
}
int maxsum=0,sum=0;
for(int i=0;i<a.length;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<a.length;i++) {
if(a[i]>maxsum)
maxsum=a[i];
}
}
System.out.println("最大子数组的和为:" + maxsum);
}
}
源代码:
效果图:




浙公网安备 33010602011771号