152. Maximum Product Subarray
来源:互联网 发布:c语言编写哥德巴赫猜想 编辑:程序博客网 时间:2024/04/24 19:43
题目:
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
.
给定一个数组,找打数组中连续相乘值最大的子数组,返回其最大值;
思路一:
对数组每个元素进行轮训,因为是相乘,所以乘以一个数之后可能是负数也可能是整数,再与下一个负数相乘之后负数可能大于整数,故需要维系最大与最小两个变量来记录中间值。
代码:8ms
class Solution {public: int maxProduct(vector<int>& nums) { int curMax = nums[0]; int curMin = nums[0]; int result = nums[0]; int maxcur, mincur; for(int i=1; i<nums.size(); i++){ maxcur = max(max(curMax*nums[i], curMin*nums[i]), nums[i]); mincur = min(min(curMax*nums[i], curMin*nums[i]), nums[i]); result = max(maxcur, result); curMax = maxcur; curMin = mincur; } return result; }};代码:8ms
class Solution {public: int maxProduct(vector<int>& nums) { int curMax = nums[0]; int curMin = nums[0]; int result = nums[0]; for(int i=1; i<nums.size(); i++){ if(nums[i]<0){ swap(curMax, curMin); } curMax = max(curMax*nums[i], nums[i]); curMin = min(curMin*nums[i], nums[i]); result = max(result, curMax); } return result; }};思路二:
给定数组全是整数,如果不存在0元素的话,数组的累积乘积的绝对值持续增大,所以需要解决的是负数的个数,如果给定数组中负数的个数为偶数的话,则可以不考虑,为奇数时需要考虑舍弃最左边第一个负数左边部分的乘积,以及舍弃最右边第一个负数右边部分的乘积。
代码:8ms
class Solution {public: int maxProduct(vector<int>& nums) { const int n = nums.size(); int result = INT_MIN; int front = 1; int back = 1; for (int i=0; i<n; i++) { front *= nums[i]; back *= nums[n-i-1]; result = max(result, max(front, back)); front = front==0 ? 1 : front; back = back==0 ? 1 : back; } return result; }};
0 0
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- 152. Maximum Product Subarray
- Volley框架的基本解读(一)
- unity4.6之UGUI之与代码结合及Text讲解
- windows 10 激活方式
- 《C++ Concurrency in Action》读书笔记三 同步并发操作
- Construct Binary Tree from Inorder and Postorder Traversal(medium)
- 152. Maximum Product Subarray
- Redis主从复制
- crontab任务不执行
- 119. Pascal's Triangle II
- iOS设置App的名称和简单的版本国际化与本地化
- postgres9.5 若干新特性和autovacuum参数解释
- 读书笔记 || C#入门经典
- java redis相关操作类
- java的同步机制synchronized