1. 程式人生 > 其它 >LeetCode-152-乘積最大子陣列

LeetCode-152-乘積最大子陣列

乘積最大子陣列

題目描述:給你一個整數陣列 nums ,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含一個數字),並返回該子陣列所對應的乘積。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/maximum-product-subarray/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:窮舉法

首先,如果陣列nums只有一個元素,直接返回這個數。

否則,通過窮舉出所有可能的連續子陣列的乘積,然後獲取較大者,使用result記錄最大值,初始化為陣列nums的第一個元素值,具體過如下:

  • 從第一個元素開始遍歷,作為連續子陣列的第一個元素;
  • 然後內層迴圈是作為連續子陣列的最後一個數組,過程中需要判斷當前的連續子陣列的乘積是否大於result,如果是則更新result的值。

最後,返回result即為最大的乘積。

public class LeetCode_152 {
    /**
     * 窮舉法
     *
     * @param nums 原陣列
     * @return 返回陣列中乘積最大的連續子陣列的乘積
     */
    public static int maxProduct(int[] nums) {
        // 如果陣列nums只有一個元素,直接返回這個數
        if (nums.length == 1) {
            return nums[0];
        }
        // result記錄當期的最大值
        int result = nums[0];
        // 從陣列的nums的第一個元素開始遍歷
        for (int i = 0; i < nums.length; i++) {
            int cur = nums[i];
            // result取較大值
            result = Math.max(result, cur);
            // 當前元素直到和最後一個元素的累乘
            for (int j = i + 1; j < nums.length; j++) {
                cur = cur * nums[j];
                // result取最大值
                result = Math.max(result, cur);
            }
        }

        return result;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{2, 3, -2, 4};
        // 測試用例,期望輸出: 6
        System.out.println(maxProduct(nums));
    }
}

【每日寄語】 不滿是向上的車輪,能夠載著不自滿的人前進。