1. 程式人生 > 其它 >一個數組子陣列求最大值

一個數組子陣列求最大值

一維陣列問題

一、求連續的元素的子陣列最大值。

首先,問題的要求是:
       輸入一個整形陣列,數組裡有正數也有負數。
       陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。
       求所有子陣列的和的最大值。要求時間複雜度為O(n)。

我寫的程式碼如下:

import java.util.*;

public class Array {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x, i;
        int max = 0, lsmax = 0;

        x = sc.nextInt();
        int[] a = new int[x];

        for (i = 0; i < a.length; i++) {
            a[i] = sc.nextInt();
            if (i == 0) {
                lsmax = a[i];
                max = lsmax;
            } else {
                if (lsmax < 0) {
                    lsmax = a[i];
                } else {
                    lsmax += a[i];
                }

            }
            if (lsmax > max) {
                max = lsmax;
            }
        }

        System.out.println(max);
    }
}

 然後我說一下我的思路,當時上課的時候雖然這個很簡單,但是我還是沒有想出來。

1.因為是要求所有子陣列的情況,所以有都為負數的情況以及其它情況,都為負數的情況就需要單獨對比,找出負數裡面的最大值。連續的情況就需要一個個相加來對比。

2.因為是第一階段,所以程式碼也是比較簡單,思路就是建立一個動態陣列,然後建立一個用來儲存臨時最大值的變數lsmax以及最終結果的最大值的變數max,首先判斷是否只有一個變數,是的話就是直接輸出最大值。然後當超過一個變數的時候就可以判斷前兩個數的和是否小於0,小於0的話就可以直接捨棄不要了,從當前變數從新來選。最後如果臨時最大值大於最終結果,就把臨時最大值賦值給最終結果,輸出即可。