191 除掉当前元素,其他所有元素的积
来源:互联网 发布:alpha软件go下载 编辑:程序博客网 时间:2024/05/21 09:15
21、搜狗笔试题:一个长度为 n 的数组 a[0],a[1],...,a[n-1]。现在更新数组的名个元素,即a[0]变为 a[1]到 a[n-1]的积,a[1]变为 a[0]和 a[2]到 a[n- 1]的积,...,a[n-1]为 a[0]到 a[n-2]的积(就是除掉当前元素,其他所有元素的积)。程序要求:具有线性复杂度,且不能使用除法运算符。
解答:left[i]标示着a[i]之前的乘积,right[i]标示着a[i]之后的乘积,a[i]=left[i]*right[i]。
不过,left的计算从左往右扫的时候得出,right是从右往左扫得出。a[i]=left[i]*right[i]
22、
后 2012年4 月 67 日的腾讯暑期实习生招聘笔试中,出了一道与上述 21 题类似的题,
原题大致如下:两个数 组 a[N] , b[N] ,其 中 A[N] 的各 个元 素值 已知, 现给 b[i] 赋值 , b[i] =
a[0]*a[1]*a[2]...*a[N-1]/a[i];
要求:
1. 不准用除法运算
2. 除了循环计数值,a[N],b[N]外,不准再用其他任何变量(包括局部变量,全局变量等)
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];
实现代码:
#include<iostream>#include<stdio.h>using namespace std;void arrMul(int a[],int out[],int n){int i;int left=1,right=1;for(i=0;i<n;i++)out[i]=1;for(i=0;i<n;i++){out[i]*=left;//从0-n,逐个计算其左边值 out[n-1-i]*=right;//从n-0,逐个计算计算其右边值 left*=a[i];right*=a[n-1-i];}}//测试 int main(){int i;int a[]={1,2,3,4,5,6};//总乘积720 int p[sizeof(a)/sizeof(int)];arrMul(a,p,6);for(i=0;i<6;i++)printf("%d ",p[i]);//输出 720 360 240 180 144 120return 0;}
0 0
- 191 除掉当前元素,其他所有元素的积
- 数组元素的值为其他所有元素的累积
- F:如何用正则表达式或别的方式将一个所含html元素的所有html元素除掉?
- siblings获取非当前元素的所有同等级元素
- 根据当前元素获取其他元素
- 把数组元素更新为除该元素外其他所有元素的乘积
- 除掉数组中重复元素的简单方法
- 同一块里面,当前选中元素以及其他元素
- 数组中除一个元素外其他所有元素出现二或三次,找到只出现一次的元素
- 移除掉数组里面的重复元素, 但是对于每种元素保留最后出现的那个
- 元素的所有组合
- javaScript取得当前元素的下一个元素
- jquery获取当前元素父元素的上一个元素
- jquery点击当前的元素为当前的元素
- jQuery 点击页面 获得当前点击元素的id 或者其他信息
- jQuery如何实现点击页面获得当前点击元素的id或其他信息
- 求数组中除第i个外的所有其他数组元素的乘积
- 数组乘积--数组中除第i个外的所有其他数组元素的乘积
- 颜色模型
- 关于 alter table move tablespace 的一点理解
- 折半查找的递归算法
- 浅谈Hibernate里的Fetch的作用
- UVAOJ-Digit counting
- 191 除掉当前元素,其他所有元素的积
- Cocos2d-x 内存机制浅析
- Android 滑动删除效果实现
- 基于内存查看STL常用容器内容
- CS/BS
- NYOJ 847 S + T
- uva455 Periodic Strings
- sql数据库中的约束
- 《C程序设计语言》书籍内容学习第一弹