題目:給定乙個長度為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 的最大值與...