[来源]:腾讯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* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。

    多数元素 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [3 ...

  2. leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。

    署名:csdn等网站博客copy产出,AI时代知识新搬运工 言归正传:写下这道题的个人理解 题干: 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的 ...

  3. 【IT笔试面试题整理】字符串转数组+数组转字符串

    [试题描述]定义一个函数,字符串转数组数组转字符串 [参考代码] 1 public static int strToInt(String str) 2 { 3 int i = 0, num = 0; ...

  4. 【IT笔试面试题整理】数组中出现次数超过一半的数字

    [试题描述]数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. [试题分析]时间复杂度O(n),空间复杂度O(1) 思路1: 创建一个hash_map,key为数组中的数,value为此数 ...

  5. 【算法】【华为】2019华为笔试 找终点:给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数,

    ■题目描述 给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数, 第一步必须从第一元素开始,1<=步长<len/2, 第二步开始以所在成员的数字走相 ...

  6. 【IT笔试面试题整理】字符串的排列

    [试题描述]输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba. 分析:这是一道很好的考查对 ...

  7. 【IT笔试面试题整理】位操作

    如何准备: Bit manipulation can be a scary thing to many candidates, but it doesn't need to be! If you're ...

  8. 网易历届笔试面试题整理大全

    整理了一下网易往届笔试面试题,希望对大家有帮助: 超级有用的面试题:Java常见面试题    常见算法面试题   数据库常见面试题  操作系统常见面试题   C/C++常见面试题  大数据常见面试   ...

  9. Java面试题:给定一个整数,按10进制来看,计算里面包含多少个0

    代码如下: package com.moson.interview;/*** 给定一个整数,按10进制来看,计算里面包含多少个0* @author moxingjian* @version 1.0* ...

最新文章

  1. 使用mii-tool设置网卡速率
  2. 自动化系导航与控制研究所
  3. linux 交叉编译 openssl
  4. 在Eclipse中使用JUnit4进行单元测试(图文教程一)
  5. sql服务器内存不足_SQL Server内存性能指标–第2部分–可用字节,总服务器和目标服务器内存
  6. FZU Problem 2168 防守阵地 I
  7. 1195 巧妙推算走楼梯(宁波大学oj)
  8. html5模板区别,网页设计和平面设计理念的六大区别
  9. xtile 下载_Stata: gen 命令中的 group() 函数的潜在风险
  10. IDEA 下载、安装、配置和案例
  11. 计算机病毒入侵方法,预防电脑病毒入侵的方法
  12. 网易云音乐数仓建模实践
  13. miui删除内置不卡米教程_MIUI11卸载系统自带软件,无需ROOT也可以
  14. 联想昭阳E43闪屏|屏幕有亮线|问题交流QQ群群号
  15. C/C++ 动态检测内存错误利器 - ASan
  16. AGV导航磁条的导航方式有哪些?
  17. css奇技淫巧-色彩渐变与动态渐变
  18. vue+echarts中国地图+省市级地图(全程教学,你也可以)
  19. 严重警告:大家不要使用任何形式的免费发短信的软件[转贴]
  20. yii2 gii生成curd

热门文章

  1. 记一次 Vue 移动端活动倒计时优化
  2. 弹窗时候禁止页面滚动
  3. 【转载】15分钟搭建Linux操作系统+Oracle数据库的环境
  4. CodeAbstract
  5. Lower Power with CPF(三)
  6. ListBox实现拖拽排序功能
  7. ubuntu下安装mysql 杂记
  8. 時鐘,天氣預報--js
  9. 政府采购就是支持民族软件吗?
  10. 计算机风扇维修,教你简单修理电脑散热风扇