152. Maximum Product Subarray(中等, 神奇的 swap)
2024-10-19 01:32:04
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
.
Idea:
https://leetcode.com/problems/maximum-product-subarray/discuss/
keep max(min) value in imax(imin) varable when pointer = i.
swap起到重要作用.
虽然求子数组最大乘积,但最小乘积也需维护,因为:
A Truth is:
big -> small when (A[i] big when (A[i]
人家想法,自个代码:
\(O(n)\) time, \(O(1)\) extra space.
// https://leetcode.com/problems/maximum-product-subarray/discuss/
// A = [2,3,-2,4] return [2,3] = 6
int maxProduct(vector<int>& A) {
int r = A[0], imax = r, imin = r;
for (int i = 1; i < A.size(); i++) {
// A Truth is:
// big -> small when (A[i] < 0)
// small -> big when (A[i] < 0)
// whatever imax, imin is stored negt or posi in.
if (A[i] < 0)
swap(imax, imin);
// keep max(min) value in imax(imin) when pointer = i
imax = max(A[i], imax * A[i]);
// 之所以记录 imin,
// 是因为 if(A[i] < 0) swap(imax, imin);
// 用到 imin
imin = min(A[i], imin * A[i]);
r = max(r, imax);
}
return r;
}
最新文章
- C# 获取本机指定类型指定网卡的Ip地址
- (四)装饰模式-C++实现
- js获取元素的innerText属性为什么为空
- xtraTabControl 如何遍历每个选项卡 z
- Oracle数据库编程:在JDBC中应用Oracle
- Session案例
- (转)ASP.NET QueryString乱码解决问题
- 语音控制的tab选项卡
- Android开发编码规范(自用)
- 图的最小生成树(Prim、Kruskal)
- PHP 正则函数
- pyhton 关于 configparser 配置 模块 实践使用中碰到的坑
- PHP获取字符串编码与转码
- zTree树形菜单交互选项卡效果实现
- Python学习笔记:Flask-Migrate基于model做upgrade的基本原理
- Fiddler Composer 模拟post请求
- UOJ #76 【UR #6】懒癌
- 报错:Column count doesn&#39;t match value count at row 1
- JS----贪吃蛇游戏
- oc总结 --oc基础语法相关知识