子陣列的最大乘積

2021-06-17 21:21:39 字數 535 閱讀 7829

給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算任意(n-1)個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。(注意,因為陣列中數可正可負,通過排序去除最小的顯然不能滿足要求,如乘積為負,你去除最小的負值顯然不對,應該去除最大的負數值)

解法一:可以通過「空間換時間」策略。從陣列兩邊計算乘積,設array為初始陣列,s[i]表示陣列前i個元素的乘積,s[i]=s[i-1]*array[i-1],t[i]表示陣列後n-i個元素乘積,設p[i]為陣列除第i個元素外,其他n-1個元素的乘積,則有:p[i]=s[i-1]*t[i+1]。總的時間複雜度等於計算陣列s、t、p的時間複雜度加上查詢p最大值的時間複雜度等於o(n)。

解法二:求出陣列中正數,負數和0的

個數,以及陣列中絕對值最小的正數和負數,時間複雜度為o(n)。(1)當0有乙個,並且負數個數為偶數,則去掉0,若負數個數為奇數,則去掉任意乙個數使結果為0。(2)當有兩個0則n-1個數乘積只能為0。(3)當沒有0,且負數個數為奇數,則去掉

絕對值最小的負數,結果為正。(4)當沒有0且負數個數為偶數,則去掉絕對值最小的正數。

最大乘積子陣列

程式設計之美 上有一道關於在長度為n的陣列中找到n 1個元素乘積最大的題目,不過這並不是本文要討論的。本文討論的是另一種情況,給定乙個長度為n的浮點陣列,找乙個長度任意的子陣列 子陣列的元素在原陣列中是連續存放的 這個子陣列的乘積最大。通常,找乙個滿足指定條件子陣列都會使用動態規劃。遞迴縮小問題規模...

子陣列最大乘積

給定乙個double型別的陣列arr,其中的元素可正可負可0,返回子陣列累乘的最大乘積。例如arr 2.5,4,0,3,0.5,8,1 子陣列 3,0.5,8 累乘可以獲得最大的乘積12,所以返回12。解析 此題可以運用動態規劃解決 設f i 表示以i為結尾的最大值,g i 表示以i結尾的最小值,那...

子陣列最大乘積

給定乙個double型別的陣列arr,其中的元素可正可負可0,返回子陣列累乘的最大乘積。例如arr 2.5,4,0,3,0.5,8,1 子陣列 3,0.5,8 累乘可以獲得最大的乘積12,所以返回12。分析 設f i 表示以i為結尾的最大值,g i 表示以i結尾的最小值,那麼 f i 1 的最大值與...