152. Maximum Product Subarray (最大乘积子数列)
来源:互联网 发布:淘宝培训机构靠谱吗 编辑:程序博客网 时间:2024/06/06 04:36
152. Maximum Product Subarray (最大乘积子数列)
- Maximum Product Subarray 最大乘积子数列
- 题目链接
- 题目描述
- 题目分析
- 方法动态规划
- 算法描述
- 方法动态规划
- 参考代码
题目链接
https://leetcode.com/problems/maximum-product-subarray/description/
题目描述
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
.
题目分析
这道题里需要注意负负相乘得正的问题,所以需要用二维数组来记录乘积的最大值和最小值。如果当前数字为正,那么乘正的乘积会更大;反之乘负的成绩会比较大。
方法:动态规划
算法描述
用nProducts
记录负乘积,用pProducts
记录正乘积
遍历nums
,对nums[i]
:
nums[i] > 0:
if (pProducts[i - 1] * nums[i] >= nums[i]) pProducts[i] = pProducts[i - 1] * nums[i];else pProducts[i] = nums[i];if (nProducts[i - 1] * nums[i] < nums[i]) nProducts[i] = nProducts[i - 1] * nums[i];else nProducts[i] = nums[i];
nums[i] < 0:
if (nProducts[i - 1] * nums[i] >= nums[i]) pProducts[i] = nProducts[i - 1] * nums[i];else pProducts[i] = nums[i];if (pProducts[i - 1] * nums[i] < nums[i]) nProducts[i] = pProducts[i - 1] * nums[i];else nProducts[i] = nums[i];
nums[i] == 0:
pProducts[i] = nProducts[i] = 0;
参考代码
class Solution {public: int maxProduct(vector<int>& nums) { vector<int> pProducts(nums.size(), 1), nProducts(nums.size(), 1); pProducts[0] = nProducts[0] = nums[0]; int max = pProducts[0]; for (int i = 1; i < nums.size(); i++) { if (nums[i] > 0) { if (pProducts[i - 1] * nums[i] >= nums[i]) pProducts[i] = pProducts[i - 1] * nums[i]; else pProducts[i] = nums[i]; if (nProducts[i - 1] * nums[i] < nums[i]) nProducts[i] = nProducts[i - 1] * nums[i]; else nProducts[i] = nums[i]; } else if (nums[i] < 0) { if (nProducts[i - 1] * nums[i] >= nums[i]) pProducts[i] = nProducts[i - 1] * nums[i]; else pProducts[i] = nums[i]; if (pProducts[i - 1] * nums[i] < nums[i]) nProducts[i] = pProducts[i - 1] * nums[i]; else nProducts[i] = nums[i]; } else { pProducts[i] = nProducts[i] = 0; } if (pProducts[i] > max) max = pProducts[i]; } return max; }};
阅读全文
0 0
- 152. Maximum Product Subarray (最大乘积子数列)
- LeetCode:152. Maximum Product Subarray Java 子数组最大乘积
- 【LeetCode】152. Maximum Product Subarray最大连续子数组乘积
- Array-----152. Maximum Product Subarray(最大连续子数组乘积)
- LeetCode 152. Maximum Product Subarray--连续子数组最大乘积
- LeetCode-152. Maximum Product Subarray (JAVA)(子数组的最大乘积)
- LeetCode 152. Maximum Product Subarray(最大乘积)
- [leetcode]Maximum Product Subarray最大子序列乘积
- Leetcode 152 Maximum Product Subarray 子数组最大乘积
- LeetCode Maximum Product Subarray(最大子数组乘积)
- leetcode152-Maximum Product Subarray(乘积最大子数组)
- Maximum Product Subarray 乘积最大的子数组
- [Lintcode]Maximum Product Subarray乘积最大子序列
- [LeetCode] Maximum Product Subarray 求最大子数组乘积
- Maximum Subarray Maximum Product Subarray 子数组的最大和 最大乘积
- 【LeetCode-面试算法经典-Java实现】【152-Maximum Product Subarray(子数组的最大乘积)】
- 191.Maximum Product Subarray-乘积最大子序列(中等题)
- LeetCode 152. Maximum Product Subarray(最大连续乘积)
- PyTorch torch.bmm 实例
- 《iPhone X ARKit Face Tracking》
- 昨夜西风凋碧树
- 迎接双十二,EasyRecovery提前开抢买起来
- 创建glance镜像报错HTTP403
- 152. Maximum Product Subarray (最大乘积子数列)
- readyState与focus
- 区块链背后的行业机会
- 【Auto-sklearn】MacOS安装笔记
- Excel中身份证相关信息利用函数获取一例
- SpringBoot开发如何用包装类处理JSON返回的数据
- AngularJS基本知识点
- 设计模式(八)——外观模式
- 常见开源协议介绍