`

java-腾讯暑期实习生-输入一个数组A[1,2,...n],求输入B,使得数组B中的第i个数字B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]

 
阅读更多
这道题的具体思路请参看 何海涛的微博:http://weibo.com/zhedahht
import java.math.BigInteger;
import java.util.Arrays;

public class CreateBFromATencent {

	/**
	 * 题目:输入一个数组A[1,2,...n],求输入B,使得数组B中的第i个数字B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[N-1].
	 * 要求
	 * 1.不得使用除法
	 * 2.不得新建变量--how?
	 * see http://weibo.com/zhedahht
	 */
	public static void main(String[] args) {
		int[] a=new int[20];
		for(int i=0;i<20;i++){
			a[i]=i+1;
		}
		
		System.out.println(Arrays.toString(a));
		BigInteger[] b1=create(a);//I don't like 'BigInteger',but program will overflow without using it.
		System.out.println(Arrays.toString(b1));
		
		BigInteger[] b2=createWithoutDivision(a);
		System.out.println(Arrays.toString(b2));
	}

	//general solution.Use division
	public static BigInteger[] create(int[] a){
		if(a==null||a.length==0){
			return new BigInteger[0];
		}
		int len=a.length;
		BigInteger[] b=new BigInteger[len];
		//BigInteger product=new BigInteger("1");
		BigInteger product=BigInteger.valueOf(1);//<Effective Java>.Use "static factory method" instead of constructor sometimes. 
		BigInteger[] aa=new BigInteger[len];
		for(int i=0;i<len;i++){
			aa[i]=BigInteger.valueOf(a[i]);
			product=product.multiply(aa[i]);
		}
		for(int i=0;i<len;i++){
			b[i]=product.divide(aa[i]);
		}
		return b;
	}
	
	//not use division.
	public static BigInteger[] createWithoutDivision(int[] a){
		if(a==null||a.length==0){
			return new BigInteger[0];
		}
		int len=a.length;
		BigInteger[] b=new BigInteger[len];
		BigInteger[] aa=new BigInteger[len];
		b[0]=BigInteger.valueOf(1);
		for(int i=0;i<len;i++){
			aa[i]=BigInteger.valueOf(a[i]);
			if(i+1<len){
				b[i+1]=b[i].multiply(aa[i]);
			}
		}
		BigInteger tmp=BigInteger.valueOf(1);
		for(int i=len-2;i>=0;i--){
			tmp=tmp.multiply(aa[i+1]);
			b[i]=b[i].multiply(tmp);
		}
		return b;
	}
}


0
0
分享到:
评论
2 楼 bylijinnan 2012-08-23  
neyshule 写道
这是何海涛第几题啊?

这个可以在何海涛的微博搜索到

http://weibo.com/zhedahht?key_word=%E8%85%BE%E8%AE%AF&is_search=1
1 楼 neyshule 2012-08-23  
这是何海涛第几题啊?

相关推荐

    hadoop2面试题 -2012年腾讯招聘实习生笔试题.pdf

    给定一个长度为`n`的数组`a[n]`,要求构造一个新的数组`b[n]`,使得对于每一个`i` (0 ≤ i &lt; n),`b[i]`等于`a[0] * a[1] * … * a[n-1] / a[i]`,但题目明确规定不能使用除法操作。此外,还需满足以下条件: - 时间...

    世界500强面试题.pdf

    1.6.3. 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数 位于数组的后半部分 ...........................................................130 1.6.4. 给定链表的头指针和一个...

    数组循环左移

    例如,对于数组`a[0...n-1]`,我们可以用两个指针,一个从头开始,一个从尾开始,同时向中间移动并交换它们指向的元素,直到两个指针相遇。这样就可以实现数组的反转。 以题目中的例子为例,假设数组为`abcdefgh`,...

    tencentcloud-sdk-java-3.1.270

    tencentcloud-sdk-java-3.1.270

    腾讯2012实习生试题(技术运营)

    【腾讯2012实习生试题(技术运营)】是一份针对有意加入腾讯技术运营岗位的实习生的考核资料,反映了当时腾讯对于技术运营实习生的能力要求和期望。这份试题可能包括了多方面的问题,旨在考察候选人的技术理解、问题...

    实习生 简历模板 java python 阿里 腾讯

    这份简历是一位对IT领域充满热情,特别是对Java和Python编程感兴趣的实习生的简历。他在自我评价中表达了对软件开发的热爱,强调了承受压力的能力、团队合作精神、自学能力和动手实践能力。他的专业是软件工程,具备...

    tencentcloud-sdk-java-3.1.191.jar

    腾讯云SDK

    java--QQ java--QQjava--QQjava--QQ

    这个标题似乎是一个重复的字符串,其中“java”和“QQ”交替出现,可能暗示了我们正在处理一个与Java编程语言和QQ(可能是腾讯的即时通讯软件)相关的项目或者讨论。在Java编程中,QQ可能是指一个特定的应用程序接口...

    腾讯2013实习生校园招聘笔试题(附答案 ).pdf

    ### 腾讯2013实习生校园招聘笔试题解析 #### 一、表达式的运算结果及原因 题目要求分析四个表达式 `(A) a+=(a++); (B) a+=(++a); (C) (a++)+=a; (D) (++a)+=(a++);` 在 `int a = 4;` 的初始条件下,判断这些表达式...

    数组和链表的对比分析 数组和链表.docx

    2. **缩容**:当数组元素个数远低于数组容量时(例如元素个数/数组容量小于等于1/4时),数组容量减半。 这种策略可以有效减少数组的复制次数,从而降低平均时间复杂度。虽然某些情况下插入或删除操作仍可能触发一...

    腾讯sdk的客户端java版本

    这个SDK使得Java开发者能够轻松地在自己的应用中调用腾讯的各项API,提升开发效率和应用功能。下面我们将深入探讨这个SDK的一些关键知识点。 1. **SDK简介** 腾讯SDK for Java是一套完整的开发工具包,包含了腾讯...

    不定项数组输入方法.txt

    本资源为不定项数组的输入方法,利用数据结构vector实现,内有详细的C++代码,经常在算法竞赛或是通信/互联网公司(尤其是牛客网笔试题,如华为、腾讯、阿里)笔试题中用到,欢迎大家下载!

    2013腾讯实习生笔试题(word)

    ### 2013腾讯实习生笔试题解析 #### 1. 单项选择题解析 **题目1**:本题考查基本的算术运算规则及其性质。 - **选项A**: `a1` 和 `a2` 的计算结果是否相同取决于括号的影响。`a1 = x + y - z` 和 `a2 = x - z + y...

    09-10年腾讯实习生笔试、面试题

    这是一个经典的算法问题,在腾讯实习生笔试中也是一个常见的考察点。该问题的目标是从一个整数数组中找出一个子数组,使得这个子数组的元素之和最大。解决这个问题的方法有多种,其中最著名的是Kadane算法,时间...

    腾讯2021实习生校园招聘后台笔试题参考.pdf

    【腾讯2021实习生校园招聘后台笔试题解析】 1. 表达式判断与赋值操作: 在C++中,表达式(A)、(B)、(C)和(D)涉及到了自增运算符++的使用。自增运算符有两个版本:前缀++(a++)和后缀++(++a)。自增运算符会改变变量的...

    腾讯2016实习生笔试v2.docx

    编写一个函数`void reverseSentence(char *pStr, int iLen)`,该函数接收一个字符数组`pStr`作为输入,并将这个数组中的英文句子进行倒置。例如,若输入为"iamondutytoday",则输出应为"todaydutyonami"。 #### ...

    参考资料-腾讯-应用宝商业数据产品助理_实习生.zip

    【标题】: 腾讯应用宝商业数据产品助理实习生岗位相关资料 【内容】: 在互联网巨头腾讯的麾下,应用宝作为国内知名的移动应用分发平台,其商业数据产品助理实习生的角色扮演着至关重要的角色。这个职位不仅要求...

    8.(地图数据篇)腾讯地图矢量瓦片数据爬取--java代码.zip

    标题"8.(地图数据篇)腾讯地图矢量瓦片数据爬取--java代码.zip"指出,我们将探讨一个使用Java进行的腾讯地图矢量瓦片爬取项目。这通常涉及到网络请求、解析地图服务接口的JSON响应,以及可能的多线程技术来加速数据...

    2020年-腾讯-Java高级.pdf

    【腾讯2020年Java面试知识点】 在2020年的腾讯面试中,Java开发者需要具备扎实的技术基础和实际项目经验。以下是一些重点考察的知识点: 1. **项目挑战与解决思路**: 面试官可能会询问你在过往项目中遇到的重大...

Global site tag (gtag.js) - Google Analytics