子陣列的乘積
給定一個陣列a[N],我們希望構造陣列b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。在構造過程:
不允許使用除法;
要求O(1)空間複雜度和O(n)時間複雜度;
除遍歷計數器與a[N] b[N]外,不可使用新的變數(包括棧臨時變數、對空間和全域性靜態變數等);
第二個迴圈中,對於每次迴圈i,開始b[0]儲存的是a[i+1]*a[i+2]*...*a[N-1],b[i] = b[i] * b[0]就是 (a[0]*a[1]*...*a[i-1]) * (a[i+1]*a[i+2]*...*a[N-1]),同時更新b[0]。到迴圈結束的時候b[0]也正好是a[1]*a[2]*...*a[N-1]。
不允許使用除法;
要求O(1)空間複雜度和O(n)時間複雜度;
除遍歷計數器與a[N] b[N]外,不可使用新的變數(包括棧臨時變數、對空間和全域性靜態變數等);
請用程式實現並簡單描述。
先看實現程式碼:
void product(int a[], int b[], int N)
{
b[0] = 1;
for(int i = 1; i < N; i++)
b[i] = b[i-1] * a[i-1];
for(int i = N-1; i >= 1; i--)
{
b[i] = b[i] * b[0];
b[0] = b[0] * a[i];
}
return;
}
第一個迴圈中,對於每次迴圈i,b[i]儲存的是a[0]*a[1]*...*a[i-1]。第二個迴圈中,對於每次迴圈i,開始b[0]儲存的是a[i+1]*a[i+2]*...*a[N-1],b[i] = b[i] * b[0]就是 (a[0]*a[1]*...*a[i-1]) * (a[i+1]*a[i+2]*...*a[N-1]),同時更新b[0]。到迴圈結束的時候b[0]也正好是a[1]*a[2]*...*a[N-1]。
相關文章
- JZ-051-構建乘積陣列陣列
- 《劍指offer》:[52]構建乘積陣列陣列
- 獲取陣列中子串乘積的最大值陣列
- LeetCode-152-乘積最大子陣列LeetCode陣列
- 【Leetcode】152.乘積最大子陣列LeetCode陣列
- LeetCode-238-除自身以外陣列的乘積LeetCode陣列
- 力扣 - 劍指 Offer 66. 構建乘積陣列力扣陣列
- 【演算法拾遺】子陣列的最大乘積演算法陣列
- oracle按列求乘積(轉)Oracle
- 關於多項式的加和、乘積可用連結串列和陣列陣列
- 【Leetcode刷題篇】leetcode152 乘積最大陣列LeetCode陣列
- [LeetCode] Maximum Product Subarray 求連續子陣列的最大乘積LeetCode陣列
- 【矩陣求導】關於點乘 (哈達瑪積)的矩陣求導矩陣求導點乘
- 和為 K 的子陣列陣列
- 卷積運算元的矩陣向量乘積表示&一維離散降質模型卷積矩陣模型
- 演算法學習-零子陣列,最大連續子陣列演算法陣列
- 連續子陣列的最大和陣列
- 字串相乘——求字串的乘積字串
- 【矩陣的乘積/複合變換】- 圖解線性代數 05矩陣圖解
- C語言:將一個4X4的矩陣賦值,矩陣元素的值為其行數與列數的乘積C語言矩陣賦值
- 計算兩個一維陣列的卷積陣列卷積
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- 978 最長湍流子陣列陣列
- 一維子陣列最大和陣列
- iOS遍歷陣列相同值元素到另一陣列中同一物件的子陣列iOS陣列物件
- 二維陣列笛卡爾積js實現陣列JS
- 子陣列的最大異或和問題陣列
- 最大連續子陣列和的實現陣列
- 矩陣連乘矩陣
- 最短無序連續子陣列陣列
- 第四章:多維陣列和矩陣 ------------- 4.7 子陣列最大累加和陣列矩陣
- 每日一練(45):長度最小的子陣列陣列
- 【劍指offer】連續子陣列的最大和陣列
- 繩子的長度;及找陣列的波谷分析陣列
- Maximum Subarray 連續子陣列最大和陣列
- CUDA 版本矩陣乘矩陣
- 給出一個由[-100,100]之間整陣列成的陣列,求其相加和最大的連續子陣列 輸入 一個連續整陣列成的陣列 輸出 子陣列相加的最大值 樣例輸入 -......陣列
- leetcode-陣列中兩元素的最大乘積(Java)LeetCode陣列Java