1. 程式人生 > 其它 >返回一個整數陣列中最大子陣列的和

返回一個整數陣列中最大子陣列的和

一、題目

  返回一個整數陣列中最大子陣列的和。

二、要求

  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); } }