乘積最大子陣列
題目描述:給你一個整數陣列
nums
,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含一個數字),並返回該子陣列所對應的乘積。示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:窮舉法
首先,如果陣列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));
}
}
【每日寄語】 不滿是向上的車輪,能夠載著不自滿的人前進。