返回一个整数数组中最大子数组的和
一、题目
返回一个整数数组中最大子数组的和。
二、要求
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); } }

浙公网安备 33010602011771号