[leetcode] 152.Maximum Product Subarray
来源:互联网 发布:成都青年旅舍 知乎 编辑:程序博客网 时间:2024/06/11 21:57
题目:
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.
题意:
找出最大乘积的子数组,返回该最大乘积。
思路:
对于乘法,需要考虑两个情况 正数*负数= 负数,正数*0 = 0。
所以该数组中的k个0将把数组划分成k+1个块。
然后考虑这k+1个不含0的块,如果里面的负数的个数是偶数个,那么毋庸置疑,这个块最大的乘积就是这个区域所有元素的最大成绩。如果是奇数个负数,那么最大的乘积是舍去一个负数,我们可以将这个块再次划分,划分为Ai,…Aj,…Am,…An其中Aj和Am是这个块最左端和最右段的两个负数,这个块最大的值应该是Ai到A(m-1)或者A(j+1)到An之间。为什么是这两个之间呢?首先要去除一个负数,假设去除的是在Aj和Am之间Ak,那么最大的结果是Ai到A(k-1)或者A(k+1)到Aj,都比刚才两个区间要小。所以问题变成了这两个段的较大值。
对于这样的块,我们可以正向,反向扫描求积,保存两者的较大值。比如-1,-2,-3,从前往后扫描最大值是2,从后往前扫描最大值是6,故取最大值是6。
代码如下:
class Solution {public: int maxProduct(vector<int>& nums) { int size = nums.size(); if(size == 0)return 0; long long max_res = INT_MIN; long long t1 = 1; long long t2 = 1; for(int i = 0; i < size; i++) { t1 *= nums[i]; t2 *= nums[size - i - 1]; max_res = max(t1, max_res); max_res = max(t2, max_res); if(nums[i] == 0) t1 = 1; if(nums[size - i - 1] == 0) t2 = 1; } return max_res; }};
0 0
- LeetCode 152. Maximum Product Subarray
- [leetcode] 152.Maximum Product Subarray
- [LeetCode]152. Maximum Product Subarray
- leetcode:152. Maximum Product Subarray
- leetcode 152. Maximum Product Subarray
- 152. Maximum Product Subarray LeetCode
- [leetcode] 152. Maximum Product Subarray
- LeetCode *** 152. Maximum Product Subarray
- LeetCode 152. Maximum Product Subarray
- leetcode.152. Maximum Product Subarray
- LeetCode-152.Maximum Product Subarray
- LeetCode - 152. Maximum Product Subarray
- [Leetcode]152. Maximum Product Subarray
- LeetCode 152. Maximum Product Subarray
- leetcode:152. Maximum Product Subarray
- [leetcode]152. Maximum Product Subarray
- LeetCode 152. Maximum Product Subarray
- [LeetCode] 152. Maximum Product Subarray
- 大并发系统优化配置
- 1182_IP地址转换
- 悟空学Linux专栏----第50篇
- 玩转单元测试之DBUnit
- 1026: [SCOI2009]windy数 (按位dp)
- [leetcode] 152.Maximum Product Subarray
- 安装Tocmat的笔记
- 悟空学Linux专栏----第51篇
- 数据库基础---数据库系统概论个人总结版
- spring框架下单元测试
- Jni中C++和Java的参数传递
- 图解 HTTPS 通信过程
- centos proc目录简介
- 深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题