返回一個整數陣列中最大子陣列的和
阿新 • • 發佈:2022-03-14
一、題目
返回一個整數陣列中最大子陣列的和。
二、要求
1、輸入一個整型陣列,數組裡有正數也有負數;
2、陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和;
3、求所有子陣列的和的最大值,要求時間複雜度為O(n)。
三、設計思想
1、陣列的長度和各個元素由鍵盤鍵入;
2、先將各元素累加,每加一個數,看結果是否為0,若為0,重置結果,並且結果與最大子陣列和(簡稱最大和)比較,若有更大的和,就儲存較大的結果到最大和中;
3、若最大和與結果的值均為0,說明陣列為負數陣列,最大子陣列即為最大元素。
import java.util.*; public classshuzuhe { 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); } }