LeetCode Maximum Product Subarray

来源:互联网 发布:网络依赖症定义 编辑:程序博客网 时间:2024/05/16 15:56

题意:给定一个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 }));}}


0 0
原创粉丝点击