隨機陣列的連續的子陣列的和的最大值
阿新 • • 發佈:2022-03-13
import java.util.Scanner; public class sum { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt();//輸入n在值,n為隨機陣列元素的個數 int[] randoms = new int[n];//建立一個元素個數為n的陣列 int[] sum = new int[n];//該陣列用來下面操作時生成的子陣列內的元素和//假設random陣列的第一個值加到第i(i>=0)個值時期間均大於零 //那麼sum陣列的第i個值就是random的第一個值加到第i個值 //當random陣列的第一個值加到第j(j>i,j>=1)個值時小於0 //那麼sum的第(j+1)個值為random的第j個值 //當random的第(j+1)個值加到第k(k>=(j+1))個值時期間均大於零//那麼sum的第k個值為random陣列的第j個值加到第k個值 //當random陣列的第j+1個值加到第s(s>k)個值時小於0 //那麼sum的第s+1個值為random陣列的第(s+1)個值 //以此類推,得出sum陣列 for (int i = 0; i < n; i++) {//給randoms陣列賦值 randoms[i] = scan.nextInt(); } sum[0] = randoms[0];//將陣列內的第一個值作為第一個子陣列 int max = sum[0];//sum數組裡最大的數 for (int i = 1; i < n; i++) { /* * 這裡要求sum陣列之後的元素,求sum[i]時,當sum[i-1]>=0,說明random[i]加上sum[i-1]不會變小, * 那麼就讓sum[i] = sum[i - 1] + randoms[i] */ if (sum[i - 1] >= 0) { sum[i] = sum[i - 1] + randoms[i]; } else { sum[i]=randoms[i]; } if(max<sum[i]){ max=sum[i]; } } System.out.println(max);//輸出最大值 } }