152. Maximum Product Subarray
Posted skillking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了152. Maximum Product Subarray相关的知识,希望对你有一定的参考价值。
一、题目
1、审题
2、分析
求一个整数数组中的连续子串的最大乘积。
二、解答
1、思路:
①、遍历数组,采用三个变量进行记录。
maxCurProduct:包含当前下标的数组元素时的最大乘积。
minCurProduct: 包含当前下标的数组元素时的最小乘积。
product: 当前为止的最大乘积。
②、因为数组中可能存在负数,而 负数乘以越小的数乘积越大。故当 arr[i] < 0 时,交换 maxCurProduct 与 minCurProduct 值。
public int maxProduct(int[] nums) { if(nums.length == 0) return 0; int product = nums[0]; int minCurProduct = nums[0]; // 到当前元素位置 max int maxCurProduct = nums[0]; // 到当前位置 min for (int i = 1; i < nums.length; i++) { if(nums[i] < 0) { // num[i] < 0, 则 curProduct 越小,乘积越大 int tmp = minCurProduct; minCurProduct = maxCurProduct; maxCurProduct = tmp; } maxCurProduct = Math.max(nums[i], maxCurProduct * nums[i]); minCurProduct = Math.min(nums[i], minCurProduct * nums[i]); product = Math.max(product, maxCurProduct); } return product; }
以上是关于152. Maximum Product Subarray的主要内容,如果未能解决你的问题,请参考以下文章
152. Maximum Product Subarray(js)
leetcode 152. Maximum Product Subarray
刷题152. Maximum Product Subarray