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] )
解法: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 })); } }
相关文章推荐
- leetCode No.152 Maximum Product Subarray
- LeetCode - 152 - Maximum Product Subarray
- LeetCode Maximum Product Subarray 解题报告
- LeetCode——Maximum Product Subarray
- leetcode_c++: Maximum Product Subarray(152)
- leetcode 152 Maximum Product Subarray
- LeetCode-152:Maximum Product Subarray (乘积最大连续子数组) -- medium
- LeetCode_Maximum Subarray | Maximum Product Subarray
- leetcode: Maximum subarray product 菜鸟解法
- [LeetCode] Maximum Product Subarray
- Leetcode Maximum Product Subarray
- [LeetCode] Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- LeetCode Maximum Product Subarray(最大子数组乘积)
- LeetCode 解题报告 Maximum Product Subarray
- Maximum Product Subarray - LeetCode
- Leetcode:Maximum Product Subarray
- leetcode--Maximum Product Subarray
- LeetCode--Maximum Product Subarray
- Maximum Product Subarray 【leetcode】