2012腾讯实习招聘笔试附加题1求解方法
2012-04-07 19:50
323 查看
附加题1:问题描述大致如下:
一个数组a
,求构造出一个b
,使得b[i]=a[0]*a[1]*...a[n-1]/a[i];不能用除法,除了循环变量外 不能用额外的变量 ,要求O(1)的空间复杂度,O(n)的时间复杂度。
首先我对题目是有点疑问的:题目所说的O(1)的空间复杂度,那么意思是:
1、b数组占用的空间是原来a的空间?
2、还是b另外申请一个数组空间,而不用包括在O(1)中呢?
对于第一种假设,本身愚钝,万想不得其解,希望各位高手给予指点
对于第二种假设,自己实现代码余下:
想了N久自己写下如下代码:
以上代码空间复杂度O(1),时间复杂度O(n)
一个数组a
,求构造出一个b
,使得b[i]=a[0]*a[1]*...a[n-1]/a[i];不能用除法,除了循环变量外 不能用额外的变量 ,要求O(1)的空间复杂度,O(n)的时间复杂度。
首先我对题目是有点疑问的:题目所说的O(1)的空间复杂度,那么意思是:
1、b数组占用的空间是原来a的空间?
2、还是b另外申请一个数组空间,而不用包括在O(1)中呢?
对于第一种假设,本身愚钝,万想不得其解,希望各位高手给予指点
对于第二种假设,自己实现代码余下:
想了N久自己写下如下代码:
publicclass TecentTest { publicvoid change(int[] a, int[] b) { b[0] = 1; int temp = 1; for (int i = 1; i < a.length; i++) {/* b[i]表示0-->i-1的乘值 */ temp = temp * a[i - 1]; b[i] = temp; } temp = 1; for (int j = a.length - 2; j >= 0; j--) { temp = temp * a[j+1];/*temp记录j+1-->n-1的乘值 */ b[j]=b[j]*temp; /* b[j]结果值 */ } b[a.length - 1] = b[a.length - 1]; } publicstaticvoid main(String[] args) { TecentTest tt = new TecentTest(); int[] a = { 1, 2, 3, 4, 5,6 }; int[] b =newint[a.length]; tt.change(a, b); for (int i = 0; i < b.length; i++) { System.out.print(b[i] +" "); } } } /*测试结果: * 720 360 240 180 144 120 * */ |
小弟不才,违背了题目“除了循环变量外 不能用额外的变量”的条件,不知道怎样改进,希望各位高手来指点指点,谢谢先!
相关文章推荐
- 2012腾讯实习招聘笔试附加题1求解方法
- 2012腾讯实习招聘笔试附加题1求解方法
- 2012腾讯实习招聘笔试附加题1
- 2012腾讯实习招聘华工笔试记
- 腾讯实习生招聘笔试题目【附加链接】
- 2012腾讯实习笔试中看到的Catalan数
- 2012 我的腾讯暑假实习笔试面试经历
- 腾讯2010校园招聘笔试题(软件测试类)的附加题
- 2015腾讯暑期实习招聘在线笔试(问答题)
- 2012微软笔试题(暑期实习招聘)
- 腾讯2017年实习招聘在线笔试题(求逆序对)
- 2012腾讯实习笔试中看到的Catalan数
- [腾讯笔试] 2014腾讯校园招聘实习技术类笔试题目
- 腾讯2017年实习招聘在线笔试题(求逆序对)
- 2012九月十月腾讯,网易游戏,百度最新校园招聘笔试题
- [置顶] 腾讯2016实习招聘-安全岗笔试题答案详细解释
- 2012腾讯实习笔试中看到的Catalan数
- 腾讯2012实习生招聘笔试题
- 剖析腾讯实习招聘笔试题及扩展
- 腾讯2017年实习招聘在线笔试题(求逆序对)