子陣列的最大乘積

2021-09-06 05:57:31 字數 1531 閱讀 2937

題目:給定乙個長度為n的整數陣列,只允許用乘法,不能用乘法,計算任意(n-1)個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。

答:

#include "

stdafx.h

"#include

using

namespace

std;

#define infinity_max 32767

#define infinity_min -32767

void printsubarray(int *arr, int length, int

key)

else

}cout

<

子陣列的最大乘積

void findmaxvalueofsubarray(int *arr, int

length)

int negativecount = 0

;

int zerocount = 0

;

int minplusnumber =infinity_max;

int maxnegativenumber =infinity_min;

for (int i = 0; i < length; i++)

}else

if (arr[i] < 0) //

2、求負數的最大值,並且計算負數的個數

negativecount++;

}else

//3、計算0的個數

}if (zerocount > 1) //

如0的個數大於1個,則子陣列的乘積為0,子陣列組合有很多種

else

if (zerocount == 1 && negativecount % 2 == 1) //

如0的個數為1個,且負數個數為奇數,則子陣列的最大乘積為0,子陣列組合有很多種

else

if (zerocount == 1 && negativecount % 2 == 0) //

如0的個數為1個,且負數個數為偶數,子陣列組合為去掉0元素的那組

else

if (negativecount % 2 == 1) //

沒有0元素,且負數個數為奇數,子陣列組合為去掉最大負數的那組

else

if (negativecount % 2 == 0) //

沒有0元素,且負數個數為偶數,子陣列組合為去掉最小正數的那組

}int _tmain(int argc, _tchar*argv)

; findmaxvalueofsubarray(arr,

sizeof(arr)/sizeof(arr[0

]));

cout

<

return0;

}

介面執行如下:

最大乘積子陣列

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