[来源]:腾讯2013实习生笔试  

给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1]
/ a[j],在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间复杂度;除遍历计数器与a[N]
b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等)

解析:设b[0]=1

由b[i]=b[i-1]*a[i-1]可得

b[1] = a[0]

b[2] = a[0]a[1]

b[i] = a[0]a[1]a[2]…a[i-1]

b[n-1] = a[0]a[1]…a[n-2]

那么再通过b[0]这个变量来迭代出1, a[n-1], a[n-2]a[n-1], a[n-3]a[n-2]a[n-1], … , a[1]a[2]a[3]…a[n-1],迭代过程中分别乘以b[n-1], b[n-2],
… , b[0]

代码如下:

 1     // 第一轮循环用作计算 b[i] = a[0]*a[2]*...*a[i-1]
2 // 即 a[i]左边的累乘...
3 //
4 // 第二轮则,b[0]则是从右边累乘起来的,相当于右半边的部分
5 // a[i+1]*a[i+2]...*a[N-1]
6 // 然后即是b[i] *= b[0]....得出结果
7 public static void generateArray(int[] a, int b[])
8 {
9 b[0] = 1;
10 for (int i = 1; i < a.length; i++)
11 {
12 b[i] = b[i - 1] * a[i - 1];
13 }
14 System.out.println();
15
16 for (int i = a.length - 1; i >= 1; i--)
17 {
18 b[i] *= b[0];
19 b[0] *= a[i];
20 }
21 }

【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]的更多相关文章

  1. 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字

    题目:给定一个长度为N的数组,其中每个元素的取值范围都是1到N.判断数组中是否有重复的数字.(原数组不必保留) 方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同.时间复杂度为O(nlog ...

  2. Java笔试面试题整理第六波(修正版)

    转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  3. Java笔试面试题整理第三波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51247785 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  4. Java笔试面试题整理第八波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  5. Java笔试面试题整理第五波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51321498 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  6. Java笔试面试题整理第四波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51274685 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  7. Java笔试面试题整理第一波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51151650 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  8. Java笔试面试题整理第二波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51200163 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  9. 给定数组a[N]构造数组b[N]

    转自:http://blog.csdn.net/wumuzi520/article/details/7841280 给定一个数组a[N],我们希望构造数组b [N], 其中b[j]=a[0]*a[1] ...

随机推荐

  1. poj 2488 A Knight's Journey

    题目 题意:给出一个国际棋盘的大小 p*q,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 因为要求字典序输出最小,所以按下图是搜索的次序搜素出来的就是最小的. 初始方向数组:i ...

  2. CentOS 6.5 伪分布安装

    CentOS 6.5 伪分布安装 软件准备  jdk-6u24-linux-i586.bin .hadoop-1.2.1.tar.gz.hadoop-eclipse-plugin-1.2.1.jar ...

  3. HDU3572构造图的模型

    第一次面对建模的图,也映照了我以前想的算法不是重点,问题的转化才是重点 Description: N个任务,M台机器,对于每一个任务有p,s,e表示该任务要做p个时长,要从[s,……)开始,从(……e ...

  4. AngularJS 指令生命周期 complie link

    AnguarJS指令从解析到生效一共会经历Inject.Compile.Controller加载.Pre-link.Post-link这几个主要阶段. 一.AngularJS指令执行过程 1.加载An ...

  5. Mysql 分区(range,list,hash)转载

    MySQL支持RANGE,LIST,HASH和KEY四种分区.其中,每个分区又都有一种特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区 ...

  6. G 最水的一道

    G - Here Be Dragons The Triwizard Tournament's third task is to negotiate a corridor of many segment ...

  7. To datafix AR DATE

    http://www.cnblogs.com/benio/archive/2012/07/07/2580203.html AR transactions should be created on 6- ...

  8. 微擎开启redis memcache

    微擎开启redis memcache 2018年01月20日 14:39:54 luogan129 阅读数:2161更多 个人分类: 微信开发   版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  9. ReportMachine常见问题

    ReportMachine常见问题 2012-06-22 12:26:50|  分类: Delphi|举报|字号 订阅     下载LOFTER我的照片书  |     1.不打印特定的MemoVie ...

  10. Windows核心编程:第5章 作业

    Github https://github.com/gongluck/Windows-Core-Program.git //第5章 作业.cpp: 定义应用程序的入口点. // #include &q ...