LeetCode-152-乘積最大子陣列
阿新 • • 發佈:2022-04-20
乘積最大子陣列
題目描述:給你一個整數陣列
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)); } }
【每日寄語】 不滿是向上的車輪,能夠載著不自滿的人前進。