问题描述

给定一个数组 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,2,3,4,5]
输出: [120,60,40,30,24]
  提示: 所有元素乘积之和不会溢出 32 位整数
a.length <= 100000

代码

class Solution {
public:
vector<int> constructArr(vector<int>& a) {
int n = a.size(),i;
vector<int> left(n,1),right(n,1),ans(n,1);
for(i = n-2; i >= 0; --i)right[i]=right[i+1]*a[i+1];
for(i = 1; i < n; ++i)left[i] = left[i-1]*a[i-1];
for(i = 0; i < n; ++i)
ans[i] = left[i]*right[i];
return ans;
}
};

结果

执行用时 :44 ms, 在所有 C++ 提交中击败了44.30%的用户
内存消耗 :25.4 MB, 在所有 C++ 提交中击败了100.00%的用户

代码

或者更省空间的一种写法:

class Solution {
public:
vector<int> constructArr(vector<int>& a) {
int n = a.size(),i,cur = 1;
vector<int> ans(n,1);
for(i = 0; i < n; ++i)
{
ans[i] *= cur;
cur *= a[i];
}
cur = 1;
for(i = n-1; i >= 0; --i)
{
ans[i] *= cur;
cur *= a[i];
}
return ans;
}
};

结果

执行用时 :40 ms, 在所有 C++ 提交中击败了55.33%的用户
内存消耗 :24.4 MB, 在所有 C++ 提交中击败了100.00%的用户

《剑指offer》面试题66. 构建乘积数组的更多相关文章

  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]*...*A[n-1].不 ...

  2. 剑指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].不 ...

  3. 【剑指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] ...

  4. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  5. 剑指offer面试题3二维数组中的查找

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 需要与面试官确认的是,这 ...

  6. 剑指offer——面试题11:旋转数组的最小数字

    #include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-, ...

  7. 剑指Offer面试题:7.旋转数组的最小数字

    一.题目:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2 ...

  8. 剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

    一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345 ...

  9. 【剑指offer 面试题14】调整数组顺序使奇数位于偶数前面

    思路: 头尾指针,向中间遍历,依据条件交换元素. #include <iostream> using namespace std; void reOrder(int *pData, uns ...

随机推荐

  1. 深入浅出Mysql索引优化专题分享|面试怪圈

    文章纲要 该文章结合18张手绘图例,21个SQL经典案例.近10000字,将Mysql索引优化经验予以总结,你可以根据纲要来决定是否继续阅读,完成这篇文章大概需要25-30分钟,相信你的坚持是不负时光 ...

  2. 解放生产力「GitHub 热点速览 v.21.51」

    作者:HelloGitHub-小鱼干 解放生产力一直都是我们共同追求的目标,能在摸鱼的空闲把赚了.而大部分好用的工具便能很好地解放我们的生产力,比如本周特推 RedisJSON 不用对 JSON 做哈 ...

  3. 区块链开发学习第七章:第一个Dapp-猜拳游戏

    第一个简单的Dapp-猜拳游戏.本智能合约的功能很简单,就是用户与电脑猜拳,用户选择出手后,电脑随机一个选项,然后调用智能合约方法把两个选项值传过去,在智能合约上进行比较,并通过区块链合约事件广播结果 ...

  4. 『学了就忘』Linux系统定时任务 — 88、循环执行定时任务

    目录 1.crond服务管理与访问控制 2.crontab命令的访问控制 3.用户级别的crontab命令 4.crontab命令的注意事项 5.系统的crontab设置 (1)/etc/cronta ...

  5. Libevent使用例子

    初等: 客户端代码: #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #in ...

  6. Mac下好用的“visio”之 OmniGraffle Pro

    !!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 1.官方网站:https://www.omnigroup.com/omnigraffle/ ...

  7. ubuntu web服务器配置

    1.安装Apachesudo apt-get install apache2 查看状态: service apache2 status/start/stop/restartWeb目录: /var/ww ...

  8. Java 8 后的新功能梳理

    为什么要写这篇文章 经过了若干年的发展,Java逐步从java8升级为java11,java17. 让我们对比学习一下最新一版的LTS版本和java8比起来让代码简化了多少. 文本块(Text Blo ...

  9. 【LeetCode】931. Minimum Falling Path Sum 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 相似题目 参考资料 日期 题目地址:htt ...

  10. 【LeetCode】289. Game of Life 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...