数组中子数组的最大累乘积
生活随笔
收集整理的這篇文章主要介紹了
数组中子数组的最大累乘积
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
給定一個double類型的數組arr,其中的元素可正、可負、可0,返回子數組累乘的最大乘積。例如,arr = [-2.5, 4, 0, 3, 0.5, 8, -1],子數組[3, 0.5, 8]累乘可以獲得最大的乘積12,所以返回12.
基本思路
本題可以做到時間復雜度O(N)、空間復雜度O(1).
大致思路是,遍歷一遍數組,求出以每一個元素結尾的子數組的最大累乘積。如何快速的求出以 i 位置結尾的子數組的最大累積呢?假設以arr[i-1]結尾的最小乘積是min,最大乘積是max。那么,以arr[i]結尾的最大累乘積只可能來自以下三種情況:
可能是max * arr[i]
可能是min * arr[i],因為數組中可能包含負數,負負得正
可能是arr[i],因為以arr[i-1]結尾的最大乘積可能小于1
這三種可能的值中最大的那個就作為以 i 位置結尾的最大累乘積,最小的作為最小累乘積,繼續遍歷下一個位置
?
?
總結
以上是生活随笔為你收集整理的数组中子数组的最大累乘积的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在数组中找到一个局部最小的位置
- 下一篇: 打印N个数组整体最大的TopK