leetcode 152. Maximum Product Subarray 最大连乘子序列 + 很棒的动态规划DP做法
2017-09-18 10:05
489 查看
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
题意很简单,这里不就不说了,建议和leetcode 123. Best Time to Buy and Sell Stock III 一起学习。
建议和leetcode 560. Subarray Sum Equals K 动态规划DP子数组求和 和 leetcode 713. Subarray Product Less Than K 移动窗口 一起学习
就是使用DP动态求解,我也没想到是这么做得。
代码如下:
下面是C++的做法,就是做一个动态规划
代码如下:
For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
题意很简单,这里不就不说了,建议和leetcode 123. Best Time to Buy and Sell Stock III 一起学习。
建议和leetcode 560. Subarray Sum Equals K 动态规划DP子数组求和 和 leetcode 713. Subarray Product Less Than K 移动窗口 一起学习
就是使用DP动态求解,我也没想到是这么做得。
代码如下:
/* * 记录当前最大, 最小值. 因为遇到负数时, 与最小值的product可能成为最大值. * * */ public class Solution { public int maxProduct(int[] nums) { if(nums==null || nums.length<=0) return 0; int maxPro=nums[0] , minPro=nums[0] , maxRes=nums[0]; for(int i=1;i<nums.length;i++) { int a = maxPro*nums[i]; int b = minPro*nums[i]; maxPro = Math.max(Math.max(a, b), nums[i]); minPro = Math.min(Math.min(a, b), nums[i]); maxRes = Math.max(maxRes, maxPro); } return maxRes; } }
下面是C++的做法,就是做一个动态规划
代码如下:
#include <iostream> #include <algorithm> #include <vector> using namespace std; class Solution { public: int maxProduct(vector<int>& nums) { if (nums.size() <= 0) return 0; int maxPro = nums[0], minPro = nums[0], maxRes = nums[0]; for (int i = 1; i < nums.size(); i++) { int a = maxPro*nums[i]; int b = minPro*nums[i]; maxPro = max(max(a, b),nums[i]); minPro = min(min(a, b), nums[i]); maxRes = max(maxRes, maxPro); } return maxRes; } };
相关文章推荐
- leetcode 446. Arithmetic Slices II - Subsequence 等差序列的数量 + 一个很值得学习的DP动态规划做法
- leetcode 97. Interleaving String(字符串交错出现) DFS深度优先遍历 + 很明显很经典的DP动态规划做法
- (Java) LeetCode 152. Maximum Product Subarray —— 乘积最大子序列
- leetcode 139. Word Break 深度优先遍历DFS按照index递归搜索 + 很棒的动态规划DP做法
- leetcode 413. Arithmetic Slices 等差子数组 + 一个很简单DP动态规划做法
- leetcode 300. Longest Increasing Subsequence 最长递增子序列LISS + 十分经典的动态规划DP做法
- leetcode 140. Word Break II 深度优先搜索DFS + 很棒的动态规划DP 做法 + 记录前驱节点
- LeetCode之“动态规划”:Maximum Product Subarray
- HDU1069 Monkey and Banana(dp动态规划,最长非递减子序列变形题)
- LeetCode 152. Maximum Product Subarray (最大乘积子数组)
- LeetCode 53/152 Maximum Subarray/Maximum Product Subarray---DP **
- leetcode 53. Maximum Subarray(DP动态规划问题)
- 每周LeetCode算法题(十三)152. Maximum Product Subarray
- [leetcode] 152. Maximum Product Subarray 解题报告
- LeetCode 152. Maximum Product Subarray
- LeetCode Maximum Product Subarray_DP_最大子数组
- leetcode 152. Maximum Product Subarray
- 【Leetcode】152. Maximum Product Subarray 【动态规划】
- leetcode 322. Coin Change 类似背包问题 + 很简单的动态规划DP解决
- [LeetCode]152. Maximum Product Subarray