leetcode+華爲筆試題-java實現返回一個整數數組中最大子數組的和

這裏寫圖片描述

方法一:暴力枚舉
定義一個最大值max初始化一個很小的數,定義一個變量sum表示求和值,遍歷數組元素,從第一個元素開始,依次相加,如果和sum比最大值max大就將sum賦值給最大值。然後再來一個循環控制從第i個數組元素開始求和,直到n.
時間複雜度:O(n^2)

方式二:貪心法
因爲每次求和都是將i前面的元素相加,會出現重複的情況,如果出現相加完之後是負數,說明這時我就要繼續遍歷找到第一個正數,將前面的和爲負數的元素全部丟掉。如果找不到正數,那現在的值max就是最大值。
時間複雜度:O(n)

代碼如下:

public class Demo1 {
    public static void main(String[] args) {
        int arr[] = { 2, -3, 4, 11, -5, 8, 3, -6 };
        int maxSum = getMaxSum2(arr);
        System.out.println("最大子數組的和爲:" + maxSum);
    }

    private static int getMaxSum(int[] arr) {
        int max = -100000;
        for (int i = 0; i < arr.length; i++) {
            int sum = 0;
            for (int j = i; j < arr.length; j++) {
                sum += arr[j];
                if (max < sum) {
                    max = sum;
                }
            }
        }

        return max;
    }

    // 貪心法
    private static int getMaxSum2(int[] arr) {
        int n = arr.length;
        int max = -1000000;
        int sum = 0;
        for (int i = 0; i < n; i++) {
            sum += arr[i];
            if (sum > max) {
                max = sum;
            }
            if (sum < 0) {
                max = 0; // 子串和爲負數,丟掉
            }
        }
        return max;
    }

}
發佈了65 篇原創文章 · 獲贊 67 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章