子陣列的乘積
給定一個陣列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]。
相關文章
- 【DP】乘積最大子陣列陣列
- 【Leetcode】152.乘積最大子陣列LeetCode陣列
- JZ-051-構建乘積陣列陣列
- LeetCode-152-乘積最大子陣列LeetCode陣列
- LeetCode 238. 除自身以外陣列的乘積LeetCode陣列
- LeetCode-238-除自身以外陣列的乘積LeetCode陣列
- 【Leetcode刷題篇】leetcode152 乘積最大陣列LeetCode陣列
- 力扣 - 劍指 Offer 66. 構建乘積陣列力扣陣列
- oracle按列求乘積(轉)Oracle
- 關於多項式的加和、乘積可用連結串列和陣列陣列
- 和為 K 的子陣列陣列
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- 【矩陣求導】關於點乘 (哈達瑪積)的矩陣求導矩陣求導點乘
- 連續子陣列的最大和陣列
- 卷積運算元的矩陣向量乘積表示&一維離散降質模型卷積矩陣模型
- 203. 長度最小的子陣列陣列
- C語言:將一個4X4的矩陣賦值,矩陣元素的值為其行數與列數的乘積C語言矩陣賦值
- 978 最長湍流子陣列陣列
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- leetcode-陣列中兩元素的最大乘積(Java)LeetCode陣列Java
- 977.有序陣列的平方 ,209.長度最小的子陣列 ,59.螺旋矩陣II陣列矩陣
- 最大連續子陣列和的實現陣列
- leetcode_209. 長度最小的子陣列LeetCode陣列
- 子陣列的最大異或和問題陣列
- LeetCode-209-長度最小的子陣列LeetCode陣列
- 【LeetCode】209. 長度最小的子陣列LeetCode陣列
- 最短無序連續子陣列陣列
- 子陣列異或和問題陣列
- 字串相乘——求字串的乘積字串
- 給出一個由[-100,100]之間整陣列成的陣列,求其相加和最大的連續子陣列 輸入 一個連續整陣列成的陣列 輸出 子陣列相加的最大值 樣例輸入 -......陣列
- 第四章:多維陣列和矩陣 ------------- 4.7 子陣列最大累加和陣列矩陣
- lc907 子陣列的最小值之和陣列
- JZ-030-連續子陣列的最大和陣列
- 每日一練(45):長度最小的子陣列陣列
- 二維陣列笛卡爾積js實現陣列JS
- Day2| 977.有序陣列的平方 ,209.長度最小的子陣列 ,59.螺旋矩陣II陣列矩陣
- Day2 |977.有序陣列的平方& 209.長度最小的子陣列&59.螺旋矩陣II陣列矩陣
- 程式碼隨想錄陣列二刷:長度最小的子陣列(滑動視窗)陣列
- leetcode最短無序連續子陣列LeetCode陣列