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; }