您的位置:首页 > 其它

LeetCode Maximum Product Subarray

2015-02-02 15:54 597 查看
题意:给定一个int,求解字串的最大product

解法:dp咯

因为只是一个求解字串的product,只要考虑正负和零,当前的max[i]只和三个有关系,A[i],A[i]*max[i-1]以及A[i]*min[i-1],那么这样我们不妨同时维护两个dp数组,max和min,分别表示以A[i]结尾的字串中最大值和最小值。状态转移方程如下

max[i] = max( A[i], A[i]*max[i-1], A[i]*min[i-1] )

min[i] = min( A[i], A[i]*min[i-1], A[i]*max[i-1] )

public class Solution {
public int maxProduct(int[] A) {
int ret = A[0];
int l = A.length;
int max[] = new int[l], min[] = new int[l];
int preMax, preMin;
max[0] = min[0] = A[0];
for (int i = 1; i < l; i++) {
preMax = max[i - 1];
preMin = min[i - 1];
max[i] = Math.max(A[i], Math.max(A[i] * preMax, A[i] * preMin));
min[i] = Math.min(A[i], Math.min(A[i] * preMax, A[i] * preMin));
ret = Math.max(ret, max[i]);
}
return ret;
}

public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.maxProduct(new int[] { -2, 3, -4 }));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: