【C++】【LeetCode】152. Maximum Product Subarray
来源:互联网 发布:伍众网络103 编辑:程序博客网 时间:2024/06/10 04:30
题目
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.
思路
最笨的办法就是两层for循环遍历数组,时间复杂度O(n^2);
在讨论区看到一种方法非常巧妙:
循环遍历数组,对于nums[i],前面的子数组必定有一个最大结果(可能不包括最后一个值),同时记录一个imax,一个imin(这两个值包括了最后一个值)用于考虑是否要把nums[i]纳入结果数组中。如果nums[i]<0,则取前面的最小值和nums[i]相乘,与nums[i]比较出最大值,如果nums[i]>0,则取前面的最大值和nums[i]相乘,与nums[i]比较出最小值。这样,始终记录了当前遍历的结点之前的所有结点组成的数组的最大结果,和能够和后面结点连续的最大值和最小值。
代码
来自于:https://discuss.leetcode.com/topic/4417/possibly-simplest-solution-with-o-n-time-complexity
int maxProduct(int A[], int n) { // store the result that is the max we have found so far int r = A[0]; // imax/imin stores the max/min product of // subarray that ends with the current number A[i] for (int i = 1, imax = r, imin = r; i < n; i++) { // multiplied by a negative makes big number smaller, small number bigger // so we redefine the extremums by swapping them if (A[i] < 0) swap(imax, imin); // max/min product for the current number is either the current number itself // or the max/min by the previous number times the current one imax = max(A[i], imax * A[i]); imin = min(A[i], imin * A[i]); // the newly computed max value is a candidate for our global result r = max(r, imax); } return r;}
阅读全文
0 0
- 【C语言】LeetCode 152. Maximum Product Subarray
- 【C++】【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
- 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
- linux挂载iso镜像时报错的解决方法 mount: can't find cdrom in /etc /fstab or /etc/mtab
- HDU 2222
- java读写文件
- Moore–Penrose pseudoinverse
- 解决浏览器缓存问题---url拼接一个时间戳
- 【C++】【LeetCode】152. Maximum Product Subarray
- tomacat的service.xml的学习理解
- iOS NSString创建解析
- HTML表单(HTML Form)中get 和post 的区别
- fabric-sdk-java源码maven项目环境搭建
- 供应商屏幕增强
- node.js 用户上传图片到服务器
- Use varargs judiciously
- [中等] 堆优化的Dijkstra实现