题目:

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。

思路:

方法1:

直接连乘n-1个数,得到B[i];

时间复杂度:O(n^2)

方法2:

构建前向乘积数组C[i]=A[0]*A[1]*...*A[i-1],即C[i]=C[i-1]*A[i-1];

构建后向乘积数组D[i]=A[n-1]*A[n-2]*...A[n-i+1],即D[i]=D[i+1]*A[i+1];

通过C[i],D[i]来求B[i]:B[i]=C[i]*D[i]

时间复杂度:O(n)

代码:

void multiply(const vector<double>& array1,vector<double>& array2){
int len1=array1.size();
int len2=array2.size(); if(len1==len2 && len2>1){
array2[0]=1;
for(int i=1;i<len1;i++){
array2[i]=array2[i-1]*array1[i-1];
} double tmp=1;
for(int i=len1-2;i>=0;i--){
tmp*=array1[i+1];
array2[i]*=tmp;
}
}
}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/94a4d381a68b47b7a8bed86f2975db46?rp=3

AC代码:

class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int len=A.size();
if(len<1)
return vector<int>();
vector<int> B(len,1); for(int i=1;i<len;i++){
B[i]*=B[i-1]*A[i-1];
} int tmp=1;
for(int i=len-2;i>=0;i--){
tmp*=A[i+1];
B[i]*=tmp;
} return B;
}
};
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
int len=A.size();
if(len<1)
return vector<int>();
vector<int> B(len,1);
vector<int> front(len,1);
vector<int> back(len,1); for(int i=1;i<len;i++){
front[i]=front[i-1]*A[i-1];
} for(int i=len-2;i>=0;i--){
back[i]=back[i+1]*A[i+1];
} for(int i=0;i<len;i++)
B[i]=front[i]*back[i]; return B;
}
};

最新文章

  1. 转载:Centos7 从零编译配置Memcached
  2. linux性能检测工具
  3. SQL Server - 把星期一(周一)当作每个星期的开始在一年中求取周数
  4. 【iOS】使用safari对webview进行调试
  5. 关于/etc/hosts文件
  6. gdb使用笔记
  7. Github开源编辑器Atom
  8. LeetCode-Implement strStr()-KMP
  9. 使用手机模拟器与android操作系统
  10. python中os模块的常用接口和异常中Exception的运用
  11. C/C++中char* 与char []定义的区别
  12. Entity Framework 学习高级篇1—改善EF代码的方法(上)
  13. Sql server2014 内存优化表 本地编译存储过程
  14. HashMap 源码详细分析(JDK1.8)
  15. spring cloud-zuul的Filter详解
  16. 关于CMD的一些小技巧
  17. leetcode121
  18. PIVOT(透视转换)和UNPIVOT(逆透视转换)
  19. jquery去重复 如何去除select控件重复的option
  20. Django(ORM查询2)

热门文章

  1. 【小思考】Python里面有声明和定义分离这一说么?
  2. zTree通过指定ID找到节点并选中
  3. python统计文本中每个单词出现的次数
  4. Cable master POJ - 1064
  5. Redis学习篇(八)之连接相关
  6. HDU 6134 Battlestation Operational(莫比乌斯反演)
  7. python3-开发进阶Flask的基础(2)
  8. org.apache.curator:master选举和分布式锁
  9. pom通用依赖
  10. Ext中的get、getDom、getCmp、getBody、getDoc的区别