From 9db272854c1d4a93d80bfc363b4c8d17c06e225c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=A9=E8=BE=95=E9=BE=99=E5=84=BF?= Date: Thu, 30 Mar 2023 14:59:20 +0800 Subject: [PATCH] =?UTF-8?q?152:=E4=B9=98=E7=A7=AF=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E5=AD=90=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editor/cn/MaximumProductSubarray.java | 65 +++++++++++++++++++ .../cn/doc/content/MaximumProductSubarray.md | 34 ++++++++++ 2 files changed, 99 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/MaximumProductSubarray.java create mode 100644 src/main/java/leetcode/editor/cn/doc/content/MaximumProductSubarray.md diff --git a/src/main/java/leetcode/editor/cn/MaximumProductSubarray.java b/src/main/java/leetcode/editor/cn/MaximumProductSubarray.java new file mode 100644 index 0000000..2f0cb7f --- /dev/null +++ b/src/main/java/leetcode/editor/cn/MaximumProductSubarray.java @@ -0,0 +1,65 @@ +//

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

+// +//

测试用例的答案是一个 32-位 整数。

+// +//

子数组 是数组的连续子序列。

+// +//

 

+// +//

示例 1:

+// +//
+//输入: nums = [2,3,-2,4]
+//输出: 6
+//解释: 子数组 [2,3] 有最大乘积 6。
+//
+// +//

示例 2:

+// +//
+//输入: nums = [-2,0,-1]
+//输出: 0
+//解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
+// +//

 

+// +//

提示:

+// +// +// +//
Related Topics
  • 数组
  • 动态规划

  • 👍 1973
  • 👎 0
  • +package leetcode.editor.cn; + +// 152:乘积最大子数组 +public class MaximumProductSubarray { + public static void main(String[] args) { + Solution solution = new MaximumProductSubarray().new Solution(); + // TO TEST + System.out.println(solution.maxProduct(new int[]{2,-5,-2,-4,3})); + } + + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public int maxProduct(int[] nums) { + int max = nums[0]; + int[] arrMax = new int[nums.length]; + int[] arrMin = new int[nums.length]; + arrMax[0] = nums[0]; + arrMin[0] = nums[0]; + for (int i = 1; i < nums.length; i++) { + arrMax[i] = Math.max(nums[i],nums[i]*arrMax[i-1]); + arrMax[i] = Math.max(arrMax[i],nums[i]*arrMin[i-1]); + max = Math.max(max,arrMax[i]); + arrMin[i] = Math.min(nums[i],nums[i]*arrMin[i-1]); + arrMin[i] = Math.min(arrMin[i],nums[i]*arrMax[i-1]); + } + return max; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} diff --git a/src/main/java/leetcode/editor/cn/doc/content/MaximumProductSubarray.md b/src/main/java/leetcode/editor/cn/doc/content/MaximumProductSubarray.md new file mode 100644 index 0000000..2908d0c --- /dev/null +++ b/src/main/java/leetcode/editor/cn/doc/content/MaximumProductSubarray.md @@ -0,0 +1,34 @@ +

    给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

    + +

    测试用例的答案是一个 32-位 整数。

    + +

    子数组 是数组的连续子序列。

    + +

     

    + +

    示例 1:

    + +
    +输入: nums = [2,3,-2,4]
    +输出: 6
    +解释: 子数组 [2,3] 有最大乘积 6。
    +
    + +

    示例 2:

    + +
    +输入: nums = [-2,0,-1]
    +输出: 0
    +解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
    + +

     

    + +

    提示:

    + + + +
    Related Topics
  • 数组
  • 动态规划

  • 👍 1973
  • 👎 0
  • \ No newline at end of file