1. 程式人生 > >算法(8)Maximum Product Subarray

算法(8)Maximum Product Subarray

開始 一個數 既然 bar 找到 部分 自己的 spa subarray

題目:在一個數組中找到一個子數組,讓子數組的乘積最大,比如【2,3,-2,4】返回6

思路:之前自己想到的思路是對於一個int類型的數組,只要負數的個數是偶數,那麽乘積肯定是全局乘就可以了,然後對於負數個數是奇數的情況,那麽我們就找到最前和最後的一個負數,然後分別計算其前後子數組的乘積就可以了!因為其前後子數組的個數必然是偶數!想到這裏還心裏竊喜,感覺自己發現了一個莫大的規律,但是分分鐘被教做人呢!因為上面紅線標註的部分實現起來格外麻煩,但是自己的思維裏面還是少了一步!那就是既然你已經想到了要麽是從數組頭開始,要麽從數組尾開始,那麽這不直接遍歷數組就可以了嘛!【早晨寫著寫著代碼,竟然對後向的乘法的必要性產生懷疑,前向相乘是所有的情況了嗎?】那這裏就要單獨拿出0來說一下了,當一個乘積碰到0的時候,無論多麽長的數字,相乘都會是0,前功盡棄!此時就要重置初始乘積了!突然想起來一個數組

2,3,-2,100

這樣能找到100嗎?如果只是前向的乘積的話,那麽肯定是找不到100的,因為有-2這個天塹沒辦法跨越,但是如果後向的話,相當於從後方包抄了!

正確理解這種數組的結構吧!

算法(8)Maximum Product Subarray