劍指Offer 052 構建乘積陣列

2021-07-12 05:20:52 字數 1762 閱讀 7419

牛客oj:構建乘積陣列

九度oj:未收錄

github**: 052-構建乘積陣列

csdn題解:劍指offer–052-構建乘積陣列

牛客oj

九度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],

然後我們再從尾到頭掃瞄一遍,對於當前第i位,我們任然按照前面的思想,累乘a[len-1]*…a[i+1]

例如:a=求b

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 ...