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

一、题目

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

二、要求

  1、输入一个整型数组,数组里有正数也有负数;

  2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

  3、求所有子数组的和的最大值,要求时间复杂度为O(n)。

三、设计思想

  1、数组的长度和各个元素由键盘键入;

  2、先将各元素累加,每加一个数,看结果是否为0,若为0,重置结果,并且结果与最大子数组和(简称最大和)比较,若有更大的和,就保存较大的结果到最大和中;

  3、若最大和与结果的值均为0,说明数组为负数数组,最大子数组即为最大元素。

import java.util.*;

public class shuzuhe {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        int n;
        int[] a = new int[100];
        System.out.println("请输入数组长度");
        n = sc.nextInt();
        Scanner sca = new Scanner(System.in);
        for(int i=0;i<n;i++) {
            a[i] = sca.nextInt();
        }
        int maxsum = 0,sum = 0;
        for(int i=0;i<a.length;i++) {
            sum = sum + a[i];//累加
            if(sum<0)        //若当前和小于0,则重置为0
                sum=0;
            
            if(sum>maxsum)   //若当前和大于最大和,则重置最大和
                maxsum = sum;
        }
        
        if(maxsum==0) {      //若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-14 19:09  慢漫曼蔓  阅读(43)  评论(0)    收藏  举报