最大子数组和的乘法版本, dp, 计算以nums[i]结尾的最大子数组乘积, 同时记录最大子数组和最小子数组(因为有负数的情况)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
/**
* 最大子数组和的乘法版本, dp, 计算以nums[i]结尾的最大子数组乘积,
* 同时记录最大子数组和最小子数组(因为有负数的情况)
*/
public int maxProduct(int[] nums) {
int len = nums.length;
int[] fMax = new int[len];
int[] fMin = new int[len];
fMax[0] = fMin[0] = nums[0];
for (int i = 1; i < len; i++) {
fMax[i] = Math.max(nums[i], Math.max(fMax[i-1] * nums[i], fMin[i-1] * nums[i]));
fMin[i] = Math.min(nums[i], Math.min(fMax[i-1] * nums[i], fMin[i-1] * nums[i]));
}
return Arrays.stream(fMax).max().getAsInt();
}
}

Comments
Recent Posts
计算机网络
进程树
进程管理
Categories
Website Info
Article Count :
4
Total Word Count :
14.4k
Unique Visitors :
Page Views :
Last Update :