返回一个整数数组中最大子数组的和(一)

题目要求:返回一个整数数组中最大子数组的和
具体要求:输入一个整形数组,数组里有正数也有负数;
     数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
     求所有子数组的和的最大值。要求时间复杂度为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);
}
}

源代码:

效果图:

 

posted @ 2022-03-13 22:39  今天又双叒叕在敲代码  阅读(30)  评论(0编辑  收藏  举报