CVTE笔试题

一、题目

给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法: 要求O(1)空间复杂度和O(n)的时间复杂度;
除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);请写出程序(主流编程语言任选)实现并简单描述。

二、解法

 1 package test;
 2 import java.util.ArrayList;
 3 public class Tang {
 4     public static void main(String[] args) {
 5         int[] array = {4,5,2,8,3};
 6         int[] b = Tang(array);
 7     }
 8     public static int[] Tang(int[] arrayA){
 9         if(arrayA == null || arrayA.length == 0){
10             return arrayA;
11         }
12         int[] arrayB = new int[arrayA.length];
13         arrayB[0] = 1;
14         //先存b[i]的左边数的乘积
15         for(int i = 1; i < arrayA.length; i++){
16             arrayB[i] = arrayA[i-1]*arrayB[i-1];
17         }
18         int temp = 1;
19         //再存b[i]的右边数的乘积
20         for(int i = arrayA.length-2; i >= 0; i--){
21             temp *= arrayA[i+1];
22             arrayB[i] *= temp;
23         }
24         return arrayB;
25     }
26 }

 

posted @ 2017-09-07 21:11  fankongkong  阅读(1490)  评论(0编辑  收藏  举报