【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]
[来源]:腾讯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]相关推荐
- 给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。
多数元素 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [3 ...
- leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。
署名:csdn等网站博客copy产出,AI时代知识新搬运工 言归正传:写下这道题的个人理解 题干: 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的 ...
- 【IT笔试面试题整理】字符串转数组+数组转字符串
[试题描述]定义一个函数,字符串转数组数组转字符串 [参考代码] 1 public static int strToInt(String str) 2 { 3 int i = 0, num = 0; ...
- 【IT笔试面试题整理】数组中出现次数超过一半的数字
[试题描述]数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. [试题分析]时间复杂度O(n),空间复杂度O(1) 思路1: 创建一个hash_map,key为数组中的数,value为此数 ...
- 【算法】【华为】2019华为笔试 找终点:给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数,
■题目描述 给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数, 第一步必须从第一元素开始,1<=步长<len/2, 第二步开始以所在成员的数字走相 ...
- 【IT笔试面试题整理】字符串的排列
[试题描述]输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba. 分析:这是一道很好的考查对 ...
- 【IT笔试面试题整理】位操作
如何准备: Bit manipulation can be a scary thing to many candidates, but it doesn't need to be! If you're ...
- 网易历届笔试面试题整理大全
整理了一下网易往届笔试面试题,希望对大家有帮助: 超级有用的面试题:Java常见面试题 常见算法面试题 数据库常见面试题 操作系统常见面试题 C/C++常见面试题 大数据常见面试 ...
- Java面试题:给定一个整数,按10进制来看,计算里面包含多少个0
代码如下: package com.moson.interview;/*** 给定一个整数,按10进制来看,计算里面包含多少个0* @author moxingjian* @version 1.0* ...
最新文章
- 使用mii-tool设置网卡速率
- 自动化系导航与控制研究所
- linux 交叉编译 openssl
- 在Eclipse中使用JUnit4进行单元测试(图文教程一)
- sql服务器内存不足_SQL Server内存性能指标–第2部分–可用字节,总服务器和目标服务器内存
- FZU Problem 2168 防守阵地 I
- 1195 巧妙推算走楼梯(宁波大学oj)
- html5模板区别,网页设计和平面设计理念的六大区别
- xtile 下载_Stata: gen 命令中的 group() 函数的潜在风险
- IDEA 下载、安装、配置和案例
- 计算机病毒入侵方法,预防电脑病毒入侵的方法
- 网易云音乐数仓建模实践
- miui删除内置不卡米教程_MIUI11卸载系统自带软件,无需ROOT也可以
- 联想昭阳E43闪屏|屏幕有亮线|问题交流QQ群群号
- C/C++ 动态检测内存错误利器 - ASan
- AGV导航磁条的导航方式有哪些?
- css奇技淫巧-色彩渐变与动态渐变
- vue+echarts中国地图+省市级地图(全程教学,你也可以)
- 严重警告:大家不要使用任何形式的免费发短信的软件[转贴]
- yii2 gii生成curd