【剑指offer】不使用除法,构建乘积数组,C++实现
# 题目

# 思路
设C[i] = A[0] * A[1] * … * A[i-1],D[i] = A[i+1] * … * A[n-1],则C[i]按照从上到下的顺序计算,即C[i] = C[i-1] * A[i-1]。D[i]按照从下而上的顺序计算,即D[i] = D[i+1] * A[i+1] 。由C[i] 和 D[i]可以退出计算B[i]的公式,即B[i] = C[i] * D[i] = C[i-1] * A[i-1] * D[i+1] * A[i+1] 。

# 代码
#include <iostream>
#include <vector>
using namespace std; // 构建乘积数组
class Solution {
public:
vector<int> multiply(const vector<int>& A)
{
// 存储结果
int n=A.size();
vector<int> b(n); // 计算结果
int ret;
ret = 1;// 存储C[i]
for(int i=0;i<n;ret*=A[i++]){
b[i]=ret;
} ret = 1;// 存储D[i]
for(int i=n-1;i>=0;ret*=A[i--]){
b[i]*=ret;
}
return b;
}
}; int main()
{
const vector<int> a = {1,2,3,4,5};
Solution solution;
solution.multiply(a);
return 0;
}
【剑指offer】不使用除法,构建乘积数组,C++实现的更多相关文章
- 剑指offer(51)构建乘积数组
题目描述 给定一个数组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].不 ...
- 剑指offer五十一之构建乘积数组
一.题目 给定一个数组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].不 ...
- 【剑指Offer】51、构建乘积数组
题目描述: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1]. 其中B中的元素B[i]=A[0] * A[1]... * A[i-1] * A[i+1] ...
- 剑指Offer - 九度1384 - 二维数组中的查找
剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
- 【Offer】[66] 【构建乘积数组】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 给定一个数组A[0, 1, -, n-1],请构建一个数组B[0, 1, -, n-1],其中B中的元素B[i] =A[0]×A[1]× ...
- 《剑指Offer》面试题-二维数组中的查找
题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7318 解决:1418 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到 ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指 offer 第一题: 二维数组中的查找
打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣
- 剑指Offer编程题1——二维数组中的查找
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
- 剑指offer(1)二维数组的查找
限制今天起开始也刷剑指offer啦,一步一步来. 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数, ...
随机推荐
- 爬虫框架Scrapy之案例二
新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 效果演示图: items.py import scrapy import sys reload(s ...
- hiho 1323 : 回文字符串 dp
#1323 : 回文字符串 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个字符串 S ,最少需要几次增删改操作可以把 S 变成一个回文字符串? 一次操作可以在任 ...
- Moment.js的一些用法
前记:项目开发用到了日历插件(Pikaday.js),同时也用到了Moment.js(日期处理类库) 1.subtract:减去,下面代码的意思是减去1天 this.yestdayStr = mome ...
- ng-options 如何实现其中一项option禁选
<select class="form-control" ng-model="functionPaymentMethod" ng-options=&quo ...
- ajax实现用户注册
需求分析 页面中给出注册表单: 在username input标签中绑定onblur事件处理函数. 当input标签失去焦点后获取 username表单字段的值,向服务端发送AJAX请求: djang ...
- 使用lock锁或Monitor.Enter的目的
锁定的目的:由于多个线程 并行/并发 处理同一个“数据对象”(比如:在其它线程的某个地方发生了Clear.Add.Remove.Change等操作),导致“数据对象”不断变化,没法用了,所以,为了保证 ...
- linux共享上网设置
1.打开内核ip转发 vi /etc/sysctl.conf net.ipv4.ip_forward = 1 执行sysctrl -p生效 2.如果主机未启用防火墙,那么如下设置iptables [ ...
- oracle 11g各种下载地址
Oracle Database 11g Release 2 Standard Edition and Enterprise Edition Software Downloadsoracle 数据库 1 ...
- UVALive-3523 Knights of the Round Table (双连通分量+二分图匹配)
题目大意:有n个骑士要在圆桌上开会,但是相互憎恶的两个骑士不能相邻,现在已知骑士们之间的憎恶关系,问有几个骑士一定不能参加会议.参会骑士至少有3个且有奇数个. 题目分析:在可以相邻的骑士之间连一条无向 ...
- spring配置bean的生命周期
配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...