题目:一个数组a[n],求构造出一个b[n],使得b[i]=a[0]*a[1]*...a[n-1]/a[i];不能用除法,除了循环变量外 不能用额外的变量 ,要求O(1)的空间复杂度,O(n)的时间复杂度。
key:
/**b[0] = a[1]*a[2]*a[3]*a[4]*a[5]····a[n-3]*a[n-2]*a[n-1]
*b[1] = a[0] *a[2]*a[3]*a[4]*a[5]···a[n-3]*a[n-2]*a[n-1]
*b[2] = a[0]*a[1] *a[3]*a[4]*a[5]···a[n-3]*a[n-2]*a[n-1]
*b[3] = a[0]*a[1]*a[2] *a[4]*a[5]···a[n-3]*a[n-2]*a[n-1]
*b[4] = a[0]*a[1]*a[2]*a[3] *a[5]···a[n-3]*a[n-2]*a[n-1]
*b[5] = a[0]*a[1]*a[2]*a[3]*a[4] *a[6]···a[n-3]*a[n-2]*a[n-1]
*.
*.
*.
*b[n-2] = a[0]*a[1]*a[2]*a[3]*a[4]···a[n-4]*a[n-3] *a[n-1]
*b[n-1] = a[0]*a[1]*a[2]*a[3]*a[4]···a[n-4]*a[n-3]*a[n-2]
*/
public class BuildArr{
public static void main(String[] args){
private int[] a = {2,3,5,7,8,9,3,5,8} ;
int[] b = new int[a.length] ;
build(a,b) ;
for(int i=0;i<a.length;i++){
System.out.print("a["+i+"]="+a[i]) ;
}
}
public static build(int[] a,int[] b){
int b[0] = 1 ;
for(int i=1;i<a.length;i++){
b[i] = b[i-1]*a[i-1] ;
}
int a[0] = 1 ;
for(int j=a.length-2;j>=0;j--){ //b[n-2]
a[0]*=a[j+1] ;
b[j]*=a[0] ;
}
}
}