(數組)前綴和、前綴積及其應用


什么是前綴和、前綴積?

前綴和、前綴積也稱前綴和數組,前綴積數組。

給一數組A,

前綴和:新建一數組B,數組中每一項B[i]保存A中[0…i]的和;

后綴和:新建一數組B,數組中每一項B[i]保存A中[i…n-1]的和;

前綴積:新建一數組B,數組中每一項B[i]保存A中[0…i]的積;

后綴積:新建一數組B,數組中每一項B[i]保存A中[i…n-1]的積;

前綴和、前綴積的應用(例子):

1、題目1:

給定浮點數組a,求一數組b,b[i]=a[0]*a[1]*…*a[i-1]*a[i+1]*…*a[n-1],不能使用除法,不允許新開數組。

思路:

先求“后綴積”:

for(int i=n-1;i>=0;i—) b[i]=a[i]*((i==n-1)?1:b[i+1]);

順帶求“前綴積”:

for(int i=0,j=1;i<n;j*=a[i++]) b[i]=j*((i==n-1)?1:b[i+1]);

2、題目2:

求數組中連續一段和,絕對值最小?

思路:

前綴和的性質:a[i]+a[i+1]+…+a[j]=sum[j]-sum[i-1]

前綴和排序,取最小

3、題目3:

把一個數組從中間p位置分開,使得a[0]+…+a[p-1]與a[p]+a[p+1]+…+a[n-1]差值最小?

思路:

  • 前綴和-(總和-前綴和)=2*前綴和-總和,是該公式最小;
  • 如果都是非負數,可以采取“兩頭掃”的方法,和較小的那邊多加一個數;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM