1. 程式人生 > 其它 >隨機陣列的連續的子陣列的和的最大值

隨機陣列的連續的子陣列的和的最大值

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);//輸出最大值 } }