leecode---dfs,array,局部和全局---152. Maximum Product Subarray
题意
给一个数组,求出数组中元素连乘的最大结果
分析
因为可能存在负数,所以要记录最大值和最小值,因为最小值可能是负数,乘以负数之后就变成正数了。
所以不断刷新最大值,最小值和全局最大值。
blog.csdn.net/whuwangyi/article/details/39577455
代码
class Solution {
public int maxProduct(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
if (nums.length == 1) {
return nums[0];
}
//维护全局最大值和局部最大最小值,因为可能一做乘法就从最小变成最大了
int globalMax = nums[0];
int localMax = nums[0];
int localMin = nums[0];
for (int i = 1; i < nums.length; i++) {
int tempMin = Math.min(nums[i], Math.min(localMax * nums[i], localMin * nums[i]));
int tempMax = Math.max(nums[i], Math.max(localMax * nums[i], localMin * nums[i]));
localMax = tempMax;
localMin = tempMin;
globalMax = Math.max(localMax,globalMax);
}
return globalMax;
}
}