From c867c71ebf53b233fabf83791cac0d51ba9f8a1c Mon Sep 17 00:00:00 2001 From: Charlie Date: Fri, 3 Oct 2014 15:01:16 -0400 Subject: [PATCH 1/2] remove .pyc files --- BinaryTree.pyc | Bin 3201 -> 0 bytes LinkedList.pyc | Bin 1210 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 BinaryTree.pyc delete mode 100644 LinkedList.pyc diff --git a/BinaryTree.pyc b/BinaryTree.pyc deleted file mode 100644 index 32aa9c83f70d0e03d2deea7bb820ea59abae90e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3201 zcmcIm-ESL35T8AN#CGf^P0~1}w6cVvUPVQy5CQ?Es6?egm8mX86@hBy<~Gi{=R5aq z-6m4}ls@plpMum!{t*6@KEMkfznSyLRpOEO?k2OdbF(wQ{q0;zZ(5D@!M)&sroXHB z`&EZ1`^6&)aVv_5hKlwTDIR+ic{D81ehK3enKB(J3d{70=#1!x{R){1g}AE}F3t2> zL9bKTnAw-{jyfX`_rlmLIJekgF;$Fn;q9q<9;$RkeD7ChOBB;sE<`S-u~M+F{#Qzp z2Er~fxlnlJ;@g?56$)IRN0Y2_KsG46BoJ-Rg1~}&09w0XX^91L{?upHRbI3SLF$@nc_r1vB}j4doRT1Q6AG7~(vnAx6yPJqhi zE$?Oh`*ID?K*=eFZ5x#0^l7^<8jyhlE#ARvfOb{qDfg~g^qt?M0TIN zrb(4f(UfwkC44BMR${un(X{evE&(IEq_*`onUsPOKq=U3=43?M-V^>e{> zaafW*d7N@5#5`PgpM><2N0SCkmdVx0HRu#A92RtIq=~v3-0<4#5L+7)d?RMosij4y zbsE4Mt3z+npeZ3hLX6u8rJjGR9^>P|6ZpC)`sO}>-Sc^SyTYFLq(_U|u}mz>ypx`p zvDWZgkaGCsTs}(2Cg27l{q9~b%FLpVNx$ojMkWp&Q#my+(7p_cLmQ9BLzDKLkpn&K zjRI!1ykTQ>IVa%9nkFyv9%M#Rb2jQ7nDaPu+-^qcA_@M2 zW}iZkS63_O)>XM$=tQe(-K(libsg7+s!|y<7b^|OhPtd)yiK*HwpG{XO_=uoxHmLf z3sPDSlW-hiC_5SO_5{3ou)^Xx#G*dY{3<}@H+L-8Yqfgc5S_J?&=jh|g&Y9kOC^T`K5-}lgrEn6B7mCy!U1t{yIARdHN!o(e4TP|7}F%p0QK#tEePeDjF+NML;H? zxuPPZ8=`BXuj7!44&`x|kK5n;#ELzCfZKLsovkb1;YnH-=AR_*B2F^o9YcuC5%Ch; z1caCh3C11blyJI~GS+DHOfccz?Y$dchshFmd^*0?kFk}u9QE-7tkC)IaTohN5ay_(jSiT+qm z^@nxkZFR1bkuiS8+&^FWZ*`T7Y;|FZk#+w0>Pl47+E&(U-Q%DRhE$(_GsuVm6vFc* zJ4|UIWw|(@<}rC;y9nu8QO=TKJN&!K^-(kr=wU7rfJ5r;ustcF_{0r`t?=6ws4^aG zoo|G?h?YT|eNYDwtvQ$0cagMZeyolHVGgtaBg`MM!|Z&^UxC+v`(p4z%A8AGQ}={V z-O7u8i#|;kX6B<jt3s a40(X6MPRwOFI1w=t5%OU(x0f<{ooG-mH$)# From db18001778dea25eb12fdd1df1b7e32d0a63444d Mon Sep 17 00:00:00 2001 From: Charlie Date: Fri, 3 Oct 2014 16:31:07 -0400 Subject: [PATCH 2/2] add maximum product subarray --- maximum_product_subarray.py | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 maximum_product_subarray.py diff --git a/maximum_product_subarray.py b/maximum_product_subarray.py new file mode 100644 index 0000000..89cb258 --- /dev/null +++ b/maximum_product_subarray.py @@ -0,0 +1,52 @@ +import unittest + + +class Solution: + # @param A, a list of integers + # @return an integer + def maxProduct(self, A): + # subproblem is maxProduct(A[n-1]) + # looks like optimal substructrure, dp should be applicable + # + # let's use: + # m: positive product for A[x:i], initial with 0 + # n: negative product for A[x:i], initial with 0 + # + # for example [2,3,-2,4] + # i 2 3 -2 4 + # m 2 6 0 4 + # n 0 0 -12 -48 + # best 2 6 6 6 + if not A: + raise ValueError + if len(A) == 1: + return A[0] + + m, n, best = 0, 0, float('-inf') + for i in A: + if i >= 0: + m, n = max(m * i, i), n * i + else: + m, n = n * i, min(m * i, i) + best = max(m, best) + return best + + + +class Test(unittest.TestCase): + + def test(self): + s = Solution() + self.assertEqual(s.maxProduct([-2,0,-1]), 0) + self.assertEqual(s.maxProduct([-4,-3,-2]), 12) + self.assertEqual(s.maxProduct([2,3,-2,4]), 6) + self.assertEqual(s.maxProduct([-2]), -2) + self.assertEqual(s.maxProduct([0.1, 0.1, 2]), 2) + self.assertEqual(s.maxProduct([-2, 2, -2]), 8) + self.assertEqual(s.maxProduct([0, -2, 4]), 4) + self.assertEqual(s.maxProduct([0, -2, -2, 4]), 16) + self.assertEqual(s.maxProduct([1, -2, 2, 2, 4]), 16) + + +if __name__ == '__main__': + unittest.main()