腾讯数组乘积赋值的问题
2012-08-23 14:37
267 查看
后2012年4月67日的腾讯暑期实习生招聘笔试中,出了一道与上述21题类似的题,原题大致如下:
两个数组a
,b
,其中A
的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];
要求:
1.不准用除法运算
2.除了循环计数值,a
,b
外,不准再用其他任何变量(包括局部变量,全局变量等)
3.满足时间复杂度O(n),空间复杂度O(1)。
说白了,你要我求b=a[0]*a*...a[i-1]*a*a[i+1]..*a[N-1]/a ,就是求:a[0]*a[1]*...a[i-1]*a[i+1]..*a[N-1]。只是我把a[i]左边部分标示为left[i],b[i]右边部分标示为right[i],而实际上完全不申请left[i],与right[i]变量,之所以那样标示,无非就是为了说明:除掉当前元素a[i],其他所有元素(a[i]左边部分,和a[i]右边部分)的积。
两个数组a
,b
,其中A
的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];
要求:
1.不准用除法运算
2.除了循环计数值,a
,b
外,不准再用其他任何变量(包括局部变量,全局变量等)
3.满足时间复杂度O(n),空间复杂度O(1)。
说白了,你要我求b=a[0]*a*...a[i-1]*a*a[i+1]..*a[N-1]/a ,就是求:a[0]*a[1]*...a[i-1]*a[i+1]..*a[N-1]。只是我把a[i]左边部分标示为left[i],b[i]右边部分标示为right[i],而实际上完全不申请left[i],与right[i]变量,之所以那样标示,无非就是为了说明:除掉当前元素a[i],其他所有元素(a[i]左边部分,和a[i]右边部分)的积。
static void arrayMultiplication(int A[], int output[], int n) { int left = 1; int right = 1; for (int i = 0; i < n; i++) { output[i] = 1; } for (int i = 0; i < n; i++) { output[i] *= left; output[n - 1 - i] *= right; left *= A[i]; right *= A[n - 1 - i]; System.out.println("i:" + output[i]); System.out.println("n - 1 - i:" + output[n - 1 - i]); System.out.println("left:" + left); System.out.println("right:" + right); } for (int i = 0; i < n; i++) { System.out.println(output[i]); } }
相关文章推荐
- 一道编程之美上的问题-腾讯的笔试题目:求数组的部分乘积
- 一道编程之美上的问题-腾讯的笔试题目:求数组的部分乘积
- ios 数组赋值时取不到 数组赋值为空 奇葩问题
- 安卓按键 :数组之间的赋值 如果修改任意一个数组 会导致其他数组的值也会发生变化的问题
- 院版每日一题(2) 数组乘积问题
- 求二维数组的全排列组合,二位数组的自乘积问题
- 数组给数组赋值问题
- 结构体变量中数组成员赋值问题
- 数组未赋值问题
- C#为字符串数组动态赋值的问题
- 小小的C语言问题指针数组赋值----关于指针和数组。
- 用指针给数组赋值的一个小问题
- 数组指针的赋值与输出问题
- scanf能赋值字符数组,不能赋值给指针的问题
- C语言结构体数组赋值问题
- 关于java数组中某个元素用等号赋值给中间变量需要注意的问题。
- 指针数组赋值问题
- 关于字符串数组赋值的问题--java.lang.NullPointerException异常
- C语言指针问题,初始化,赋值,以及字符数组,字符串常量等问题
- shell数组赋值失败问题