給你乙個陣列a[1..n]
,請你在o(n)
的時間裡構造乙個新的陣列b[1..n]
,使得b[i]=a[1]*a[2]*...*a[n]/a[i]
。你不能使用除法運算。
如果直接暴力,時間為o(n^2),所以要優化
我們看到 b[i]=a[1]*......a[i-1]*a[i+1]*......a[n];
分成兩份:第一部分是
a[1]*......a[i-1]
第二部分是
a[i+1]*......a[n]
所以,計算b[i+1]時,就是用
b[i]的第一部分乘上
a[i]得到b[i+1]的第一部分
而第二部分,得到
a[i+1]*......a[n],要再得到a[i]*
a[i+1]*......a[n],只需乘上a[i],
另開陣列c,d
c[i]=
a[1]*......a[i-1]=c[i-1]*a[i-1];
d[i]=
a[i+1]*......a[n]=d[i+1]*a[i+1];
這是自己寫的,有錯誤請指出
#includeint a[100],b[100],c[100],d[100];
int main()
for(i=n;i>=0;i--)
d[i]=d[i+1]*a[i+1];
for(i=1;i<=n;i++)
printf("\n");
}return 0;
}
一天一道演算法題 樹狀陣列
題目 模板 樹狀陣列1 樹狀陣列和線段樹差不多,可以處理區間操作,但是處理不了太複雜的區間問題。不過 比線段樹簡潔很多很多!時間複雜度都為o logn 例如,區間 1,8 儲存方式如下 1 tree 1 num 1 001 001 2 tree 2 num 2 num 1 010 010 001 3...
一天一道演算法題 線段樹
題目 模板 線段樹1 rmq問題 range minimum maximum query 和求區間和的問題可以用暴力法做,時間複雜度為o n 2 用在本題會超時,所以我們選擇線段樹做。線段樹是一種用於區間操作的資料結構,用二叉樹構造。如圖。線段樹的每個節點代表了乙個區間。防止超時,用了lazy標記。...
一天一道演算法題 5 24 遞迴
我們每一天都應該比昨天更強一點 觀察下列式子 12 12 1 12 6 2 12 4 3 12 3 4 12 3 2 2 12 2 6 12 2 3 2 12 2 2 3 對於給定的n 計算n公有多少種不同的分解式?1 include 2 using namespace std 34 int cnt...