dp related problems (update continuously)
来源:互联网 发布:普希金怎么死的 知乎 编辑:程序博客网 时间:2024/05/22 19:32
Leetcode Maximum Product Subarray
这道题是说给一个整数数组,求最大的连续子数组的乘积。纠结了好久数组中包含0和负数怎么处理,其实关键就是负数的处理,于是我们记一个最大正值和最小负值,这样就可以很容易的处理负数的情况了。对于当前元素如果是负数,那么最大值可能是前面的最小负值乘以当前的负数;如果是正数,那么则很有可能是前面的最大正值乘以当前正数。
于是我们记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
1 0
- dp related problems (update continuously)
- tree related problems (update continuously)
- Related Problems
- C++ 编程技巧积累 (Update Continuously)
- Top 10 NameNode-related problems
- Some tricky problems related to "protected"
- LeetCode | DP Problems
- Continuously Integrate
- The solution to search related problems on Geonetwork: operators, quotes, phrase, chinese.
- POJ2151Check the difficulty of problems 概率DP
- poj2151(Check the difficulty of problems) dp
- poj2151Check the difficulty of problems(dp)
- when using pod update yajl-objc , occurs some problems.
- 水题大作战-updated continuously
- ARM terms, updating continuously.
- Problems
- Problems
- Problems
- cocos2dx保存截屏图片
- windows message 之WM_COMMAND
- 黑马程序员_Java插播篇(一)——Java解惑
- HDU 3150 Robot Roll Call – Cambot…Servo…Gypsy…Croooow(map)
- 数据结构之静态链表
- dp related problems (update continuously)
- 使用 C++ 处理 JSON 数据交换格式
- 第十七章 17.3.1节练习
- kettle转换之多线程
- Andrew Stankevich Contest 23 G - Rectangular Polygon
- Python---字典
- JAVA_02 线程
- uboot与系统内核mtd分区之间的关系
- 第九、十、十一周总结