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 ...
随机推荐
- DIY.NETORM帧——技术储备(1)Attribute
1.他是什么 ? 首先.我们当然Attribute它是一类,以下是一msdn文档对它的描写叙述: 公共语言执行时同意你加入类似keyword的描写叙述声明,叫做attributes, ...
- 读懂IL
读懂IL 先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用.到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西.最重要的理 ...
- C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。
原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从[网路图片].[Assets资源].[UI]修改锁定画面. 一般我们在开发Windows ...
- Thinkphp编辑器扩展类kindeditor用法
一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...
- 匿名方法,Lambda表达式,高阶函数
原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如1. 使用委托和方法关联: this ...
- 认识Underscore
Underscore一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象.它弥补了部分jQuery没有实现的功能,同时又是Backbone.j ...
- Nginx各版本的区别
Nginx官网提供了三个类型的版本Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新稳定版,生产环境上建议使用的版 ...
- 安装github for windows问题解决
到官网下载windows环境下的github,在安装时出现下面问题 An error occurred trying to download 'http://github-windows.s3.ama ...
- Android Java 与 C++ 恒调用,路径、文件名、延长的最大长度
/**************************************************************************** ********************* ...
- Redis时延问题
单线程你别阻塞,Redis时延问题分析及应对 内容目录: 耗时长的命令造成阻塞 fork产生的阻塞 持久化造成的阻塞 单线程你别阻塞,Redis时延问题分析及应对 Redis的事件循环在一个线程中处理 ...