LeetCode 152. Maximum Product Subarray

2021-07-23 11:29:24 浏览数 (1)

1. 题目描述

Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4]

Output: 6

Explanation: [2,3] has the largest product 6.

Example 2:

Input: [-2,0,-1]

Output: 0

Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

翻译过来就是求最大乘积子序列的乘积。

2. 解题思路

  • 定义当前状态的最大乘积,最小乘积,返回结果。
  • 下一个时刻的最大乘积,就是 下个时刻的值,当前最大值*下个时刻值,当前最小值 * 下个时刻的的值, 这三个中间的最大值。
  • 下个时刻的最小值为 下个时刻的值,当前最大值*下个时刻值,当前最小值 * 下个时刻的的值, 这三个中间的最小值。
  • 若最大值大于返回结果,返回结果 = 最大值
  • 返回计算结果。

3. 代码

代码语言:javascript复制
class Solution {
 public int maxProduct(int[] nums) {


 int result = nums[0];
 int max = nums[0];
 int min = nums[0];


 for(int i = 1; i < nums.length; i  ) {


 int maxTemp = max;


            max = Math.max(nums[i], Math.max(nums[i] * min, nums[i] * max));
            min = Math.min(nums[i], Math.min(nums[i] * min, nums[i] * maxTemp));


 if (max > result) {
                result = max;
 }


 }


 return result;


 }
}

0 人点赞