這個問題是目前正在尋求 n-1 最大的產品編號。該陣列的大小 n。它會存在 n 乙個 n-1 連續數。然後,我們需要找到乙個最大的產品。
事實上看到題目,感覺非常easy,迴圈走兩遍陣列就能夠得到結果,可是,那樣的話,複雜度是平方量級的,假設乙個陣列中元素非常多。那麼,時間效率上是不能接受的。所以,須要又一次思考問題。尋找簡潔的解法。
這裡。我們能夠利用輔助陣列的辦法,把須要乘在一起的數字儲存下來。單獨的放到陣列中,然後乘在一塊就能夠了。這樣說起來事實上不是那麼easy理解,我還是貼出**吧,裡面會有凝視。看完**也就清晰了:
函式宣告:
/*2.13 子陣列的最大乘積*/
ll dutmaxmultipleinarray(int*, int);
原始碼:
/*隨意n - 1個數的組合中乘積最大的一組*/
bool _dutmaxmultipleinarray = false;
ll dutmaxmultipleinarray(int* a, int size)
/*兩個輔助陣列,陣列元素儲存1 -- n - 1個數的乘積*/
ll* s = new ll[size];
ll* t = new ll[size];
ll maxvalue = 1 << 31;
s[0] = 1;
t[size - 1] = 1;
for (int i = 1; i < size; ++i)
s[i] = a[i - 1] * s[i - 1];
for (int j = size - 2; j >= 0; --j)
t[j] = a[j + 1] * t[j + 1];
ll* p = new ll[size];
for (int k = 0; k < size; ++k)
return maxvalue;
}
程式設計之美2 13 子陣列最大乘積
問題描述 給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算任意 n 1 個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。解法 1.暴力解法 o n 2 2.前字尾法 o n 3.統計法 o n 具體思路和 1.暴力解法 思路 利用兩層迴圈,依次刪掉乙個,其餘的做乘法,計算出最大的。1...
程式設計之美 2 13 子陣列的最大乘積
1.簡述 給定乙個長度為n的整數陣列,只允許用乘法,不能夠用除法,計算任意 n 1 個數的組合中乘積最大的一組,並寫出演算法時間複雜度。2.思路 題目中要求不能用除法,實際上就是否定了將所有數乘起來,然後分別去除每個數字的方法,實際上這種方法也不好實現,因為如果數字中有0的話,都乘起來就是0,還要除...
程式設計之美 2 13 子陣列的最大乘積
題目 乙個有n個數的整數陣列 取其中n 1個元素的子陣列 求子陣列的最大乘積 不能用除法。這道題自己沒有寫對,沒有考慮到負數的情況,只是單純的想去掉最小的數。但是若有負數 5 4 3 中 5 4 20更大。需要先統計正數 負數和0的個數,再分類討論。考察的其實就是細心和耐心。答案解法 int get...