dp related problems (update continuously)
Leetcode Maximum Product Subarray
这个问题是说给一个整数数组。求最大连续子阵列产品。
纠结了包括阵列中的很长一段时间0而如何处理负数,关键的事实是,负治疗,所以我们录得最大正值和最小负值,这样就能够非常easy的处理负数的情况了。对于当前元素假设是负数,那么最大值可能是前面的最小负值乘以当前的负数;假设是正数,那么则非常有可能是前面的最大正值乘以当前正数。
于是我们记dpp[i]为以第i个数结尾的最大正值。dpn[i]表示以第i个数结尾的最小负值,那么就有以下的两种更新情况:
if A[i] > 0:
dpp[i] = max(A[i], dpp[i-1]*A[i])
dpn[i] = min(0, dpn[i-1]*A[i])
if A[i] < 0:
dpn[i] = min(A[i], A[i]*dpp[i-1])
dpp[i] = max(0, A[i]*dpn[i-1])
而且在遍历的过程中用dpp[i]更新终于的结果值即可了。详细可參考以下的代码。
class Solution:
# @param A, a list of integers
# @return an integer
def maxProduct(self, A):
if A == None:
return 0
if len(A) == 0:
return 0
if len(A) == 1:
return A[0] dpp = [0]*len(A)
dpn = [0]*len(A) ans = A[0]
if A[0] > 0 :
dpp[0] = A[0]
elif A[0] < 0 :
dpn[0] = A[0] for i in range(1, len(A)):
if A[i] == 0 :
continue
elif A[i] > 0 :
dpp[i] = max(A[i], A[i]*dpp[i-1])
dpn[i] = min(0, A[i]*dpn[i-1])
else:
dpn[i] = min(A[i], A[i]*dpp[i-1])
dpp[i] = max(0, A[i]*dpn[i-1])
ans = max(dpp[i], ans)
return ans
版权声明:本文博主原创文章,博客,未经同意不得转载。
dp related problems (update continuously)的更多相关文章
- tree related problems (update continuously)
leetcode Binary Tree Level Order Traversal 这道题是要进行二叉树的层次遍历.对于层次遍历,最简单直观的办法就是进行BFS.于是我们仅仅须要维护一个队列就能够了 ...
- MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems
早晨宁波那边的IT人员打电话告知数据库无法访问了.其实我在早晨也发现Ignite监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情 ...
- [Usaco2005 Dec]Cleaning Shifts 清理牛棚 (DP优化/线段树)
[Usaco2005 Dec] Cleaning Shifts 清理牛棚 题目描述 Farmer John's cows, pampered since birth, have reached new ...
- hdu 4521 小明系列问题——小明序列(线段树+DP或扩展成经典的LIS)
小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 4521 小明系列问题——小明序列(线段树 or DP)
题目链接:hdu 4521 本是 dp 的变形,却能用线段树,感觉好强大. 由于 n 有 10^5,用普通的 dp,算法时间复杂度为 O(n2),肯定会超时.所以用线段树进行优化.线段树维护的是区间内 ...
- Codeforces 597C. Subsequences (树状数组+dp)
题目链接:http://codeforces.com/contest/597/problem/C 给你n和数(1~n各不同),问你长为k+1的上升自序列有多少. dp[i][j] 表示末尾数字为i 长 ...
- 第十四个目标(dp + 树状数组 + 线段树)
Problem 2236 第十四个目标 Accept: 17 Submit: 35 Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- POJ 1947 - Rebuilding Roads 树型DP(泛化背包转移)..
dp[x][y]表示以x为根的子树要变成有y个点..最少需要减去的边树... 最终ans=max(dp[i][P]+t) < i=(1,n) , t = i是否为整棵树的根 > 更新的时 ...
- (中等) HDU 5293 Tree chain problem,树链剖分+树形DP。
Problem Description Coco has a tree, whose vertices are conveniently labeled by 1,2,…,n.There are ...
随机推荐
- ICMP协议Ping命令的应用
ICMP的全称是 Internet Control Message Protocol ,它是TCP/IP协议族的一个子协议,属于网络层协议,用于在IP主机.路由器之间传递控制消息.从技术角度来讲,就是 ...
- 第1周 SQL Server 如何执行一个查询
原文:第1周 SQL Server 如何执行一个查询 大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Se ...
- 开源Math.NET基础数学类库使用(15)C#计算矩阵行列式
原文:[原创]开源Math.NET基础数学类库使用(15)C#计算矩阵行列式 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...
- Ewebeditor最新漏洞和漏洞指数
Ewebeditor最新漏洞和漏洞指数[收集] 来源:转载作者:佚名时间:2009-06-03 00:04:26 下面文章收集转载于网络:) 算是比較全面的ewebeditor编辑器的漏洞收集,如今的 ...
- 解决mongodb设备mongod命令不是内部或外部的命令
1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现下面文件 在安装的盘C:下建立mongodb目录,拷贝bin目录到该目录 ...
- Java Web整合开发(79) -- Struts 2
一. Struts 2.x 概述 不继承任何类的Action Struts 2的Action并不一定要实现Action接口或者继承ActionSupport,任何POJO都可以做Action,只要这个 ...
- 新浪微博id的62进制转换
某条微博链接 某条微博的链接如下,同样省略了后面的无关参数 http://weibo.com/2803301701/CeaOU15IT CeaOU15IT为这条微博的mid,与之相对应的还有一个id, ...
- c语言 int (*p)[5] 类型分析
#include<stdio.h> int main() { int i; int b[5]={1,3,5,7,9}; int (*a)[5] = &b ...
- 【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明
内容简介 1.课程大纲 2.第一部分第四课第二章:变量的世界之变量声明 3.第一部分第四课第三章预告:变量的世界之显示变量内容 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布 ...
- SQL server 提示“代理XP”被关闭的解决方法
打开SQL Server Configuration Manager(SQL Server配置管理器),启用SQL Server Agent(SQL Server 代理).