兩道關於前綴和的算法題


今天看到了兩道有關於前綴和應用的的算法題,解法挺巧妙的,分享給大家。

在這里直接放上我的代碼,題目和注釋在代碼解釋的都非常清楚。

 1     /*
 2      * 題目描述:給定一個數組a[N],我們希望構造數組b[N],
 3      * 其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。
 4      * 在構造過程:不允許使用除法;要求:O(1)空間復雜度和O(n)時間復雜度;
 5      * 除遍歷計數器與a[N] b[N]外,不可使用新的變量(包括棧臨時變量、對空間和全局靜態變量等);
 6      */
 7     class ConstructeAarry
 8     {
 9         public void ConstructeAarrySolution(double[] nums)
10         {
11             int length = nums.Length;
12             double[] result = new double[length];//存放結果
13             //先計算后綴積
14             for (int i = length - 1; i >= 0; i--)
15             {
16                 result[i] = nums[i] * (i == length - 1 ? 1 : result[i + 1]);
17             }
18             //再計算前綴積,就會得出結果
19             double j=1.0;
20             for (int i = 0; i < length; j *= nums[i++])
21             {
22                 result[i] = j * (i == length - 1 ? 1 : result[i + 1]);
23             }
24         }
25     }
26 
27 
28 
29     /*
30      * 題目描述:現有一個數組,里面包含了正數和負數,取其中若干個連續的數,要求這些數的和的絕對值最小 
31      * 對數組A[1....N],做和運算S[1...N],其中S[1] = A[1]; S[2] = A[1]+A[2];...;S[N]=A[1]+A[2]+A[3]+...+A[N]
32      * 把所有和在數軸上表示出來,則最小值只會出現在相鄰兩個數之間,故需要排序,所以算法的時間復雜度主要取決於排序的時間復雜度
33      * 在這里使用快速排序算法
34      */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM