一個數組子陣列求最大值
阿新 • • 發佈:2022-03-14
一維陣列問題
一、求連續的元素的子陣列最大值。
首先,問題的要求是:
輸入一個整形陣列,數組裡有正數也有負數。
陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。
求所有子陣列的和的最大值。要求時間複雜度為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的話就可以直接捨棄不要了,從當前變數從新來選。最後如果臨時最大值大於最終結果,就把臨時最大值賦值給最終結果,輸出即可。