牛客oj:構建乘積陣列牛客oj九度oj:未收錄
github**: 052-構建乘積陣列
csdn題解:劍指offer–052-構建乘積陣列
九度oj
csdn題解
github**
052-構建乘積陣列
未收錄劍指offer–052-構建乘積陣列
052-構建乘積陣列
題目描述
給定乙個陣列a[0,1,…,n-1],請構建乙個陣列b[0,1,…,n-1],其中b中的元素b[i]=a[0]a[1]…a[i-1]*a[i+1]…*a[n-1]。樣例輸入不能使用除法。
[1, 2, 3, 4, 5]樣例輸出
[120, 60, 40, 30, 24]
那麼對於新陣列ans[i],我們從前往後遍歷,可求得了a[1]a[2]…*a[i-1],例如:a=求b然後我們再從尾到頭掃瞄一遍,對於當前第i位,我們任然按照前面的思想,累乘a[len-1]*…a[i+1]
b[0]=a[1]×a[2]=2×3=6
b[1]=a[0]×a[2]=1×3=3
b[2]=a[0]×a[1]=1×2=2
b[0]初始化為1,從下標i=1開始,先求出c[i]的值並放入b[i],即b[i]=c[i]=c[i-1]×a[i-1],所以b[1]=b[1-1]×a[1-1]=b[0]×a[0]=1×1=1,i++
b[2]=b[2-1]×a[2-1]=b[1]×a[1]=1×2=2,i++超出長度停止迴圈
c[i]計算完畢求d[i],設定乙個臨時變數temp初始化為1
從後往前變數陣列,lengtha=3初始化i=lengtha-2=1,結束條件為i>=0
第一次迴圈,temp=temp×a[i+1]=1×a[2]=3,計算出a中最後乙個元素的值放入temp,temp相當於d[i]的值
因為之前的b[i]=c[i],所以讓b[i]×d[i]就是要儲存的結果,即b[i]=b[1]=b[1]×temp=1×3=3,i–=0
計算b[i]=b[0],temp上一步中的值是a[2],在這次迴圈中temp=temp×a[0+1]=a[2]×a[1]=3×2=6
b[i]=b[0]=b0]×temp=1×6=6,i–<0迴圈結束
所以b陣列為
#include
#include
using
namespace
std;
// 除錯開關
#define __tmain main
#ifdef __tmain
#define debug cout
#else
#define debug 0 && cout
#endif // __tmain
class solution
// d[i] = a[i + 1] * a[i + 2] * ... *a[n - 1]
for(int i = n - 1, temp = 1; i >= 0; i--)
return res;
}};int __tmain( )
劍指offer 構建乘積陣列
給定乙個陣列a 0,1,n 1 請構建乙個陣列b 0,1,n 1 其中b中的元素b i a 0 a 1 a i 1 a i 1 a n 1 不能使用除法。解題思路 解法一 暴力方法 不能使用除法,對於每個b i 可以按公式給出的方法,乙個個求解。時間複雜度為o n 2 解法二 將b i 的求解分為兩...
《劍指offer》 構建乘積陣列
給定乙個陣列a 0,1,n 1 請構建乙個陣列b 0,1,n 1 其中b中的元素b i a 0 a 1 a i 1 a i 1 a n 1 不能使用除法。解法 方法1 暴力解法。1 假設a 1,2,3 那麼b 0 a 1 a 2 b 1 a 0 a 2 b 2 a 0 a 1 2 可以發現規律,b ...
劍指offer 構建乘積陣列
描述題目 給定乙個陣列a 0,1,n 1 請構建乙個陣列b 0,1,n 1 其中乙中的元素b i a 0 a 1 a i 1 a 1 1 a n 1 不能使用除法。class solution vector res n,0 res 0 a 1 res 1 a 0 int multi a 0 a 1 ...