程式設計之美 子陣列的最大乘積

2022-08-17 07:54:13 字數 463 閱讀 1472

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

解法一:用乙個陣列儲存從左邊到右邊前i個元素的乘積。用另乙個陣列儲存從右邊到左邊n-i個元素的乘積。然後結果就為兩個陣列中元素對應的乘積,複雜度為o(n)。

解法二:設n個數的乘積為p,對p進行分析。

1,p為0,則陣列中至少包含乙個0,假設除去乙個0後,其它n-1個數的乘積為q,若q為0,則陣列中至少有兩個0,則返回0.若q為正數,返回q。若q為負數,返回0.

2,p為負數。掃瞄一遍陣列,去掉絕對值最小的負數。

3,p為正數。若陣列中存在正數值,那麼去掉最小的正數值,否則去掉絕對值最大的負數值。

對於p的正負性判定,可不需要直接求乘積,而是掃瞄一遍陣列,求出陣列中正數、負數、和0的個數,從而判斷p的正負性,遍歷的同時求出絕對值最小的正數和負數,絕對值最大的正數和負數,複雜度為o(n).

程式設計之美 子陣列的最大乘積

public class maxproduct for int a aa else 對應書上的解法1.空間換時間 public int maxproducta int a int n a.length int s new int n s 0 1 for int i 1 i n 1 i int t n...

程式設計之美 子陣列的最大乘積

題目 給定乙個長度為n的整數陣列,只允許用乘法不允許用除法,計算n 1個數組合的乘積最大的一組,並寫出演算法的時間複雜度。最直觀的解法o n2 public static int gettheexpectvaluenormal int data if result r return data ind...

程式設計之美2 13 子陣列最大乘積

問題描述 給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算任意 n 1 個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。解法 1.暴力解法 o n 2 2.前字尾法 o n 3.統計法 o n 具體思路和 1.暴力解法 思路 利用兩層迴圈,依次刪掉乙個,其餘的做乘法,計算出最大的。1...