3 2 子陣列最大乘積

2022-09-03 04:00:11 字數 661 閱讀 5523

題目描述:

給定乙個double型別的陣列arr,其中的元素可正可負可0,

返回子陣列累乘的最大乘積。例如arr=[-2.5,4,0,3,0.5,8,-1],

子陣列[3,0.5,8]累乘可以獲得最大的乘積12,所以返回12。

1/*2

思路:3

因為每個元素可正可負可0,所以在arr陣列每個位置i處記錄當前乘積的max和min,

4而位置i+1處乘積的max/min就只有三種可能:

51) max*arr[i+1];

62) min*arr[i+1];

73) arr[i+1].

8因此每次在位置i處記錄成績的最大值並更新,最終返回即可。9*/

10 #include 11 #include 12 #include 13

using

namespace

std;

1415

double max(double a, double

b)18

double min(double a, double

b)21

double maxproduct(vectorarr)

34return

res;35}

3637

intmain()

最大乘積子陣列

程式設計之美 上有一道關於在長度為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 的最大值與...