剑指offer——构建乘积数组(C++)

《点亮创新灯塔!AI应用架构师与中小学初等教育AI智能体,共筑智能化教育辅助创新灯塔》 中小学AI智能体,是基于AI技术,能感知教育场景、理解教育规律、辅助教师教学和学生学习的智能系统。做老师“做不了”的事:比如5分钟批改45本作业,精准统计每个学生的易错点;做老师“做不好”的事:比如根据学生的学习风格(视觉/听觉/动觉)推荐个性化内容;绝不做老师“该做的事”:比如情感交流、价值观引导、创意教学设计——这些“人的温度”,AI永远无法替代。我是林宇,资深AI应用架构师,专注教育AI领域8年,参与过10多个中小学AI智能体项目,曾为北京、上海、深圳等城市的100多所学校提供AI教育解决方案。 阅读详情

题目描述:给定一个数组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],不能使用除法。

对于这个题目,如果没有“不能使用除法”这个规定,可以通过计算A[0]A[1]…A[i]…*A[n-1]除以A[i]来计算B[i]的值(考虑A[i]是否为0的情况)
现在多了这个条件,我们可以这么考虑,如下面的图

对以上图片做描述:可以看出,B[i]为 A数组除了A[i]外的所有元素的乘积。我们可以画出如上的图。比如上图的B[0]原本应等于除A[0]外 A数组的所有元素的乘积,也就是B[0]=A[1]*A[2]*A[3]*A[4] …*A[n-1],再比如B[1]=A[0]*A[2]*A[3]*A[4] …*A[n-1],B[3]=A[1]*A[2]*A[4] …*A[n-1]等等,都会出来一条分界线,如上图,那我们就可以以这条分界线为基准,将B[i]划分为两部分:分界线之前和分界线之后,再将二者相乘,不就是我们所求的B[i]吗?
至于为什么对角线是1,可以这么看:B[0] = 1乘以分界线后面的部分。
B[1] = A[0]乘以1再乘以后面的部分,也就是B[1]=A[0]*B[0],以此类推。
到最后一个B[n-1] = A[0]*A[1] …*A[n-2]。需要注意每一个1只是在相应的行上设想成1,因为本身不参与该行的乘积(乘积结果为B[i])
因此,会有两个循环,第一次循环算左边的下三角(蓝色部分),第二次循环算右边的上三角(绿色部分),最后结果为二者相乘。
注意到:
第一次循环应从【1,n-1】(因为B[0] = 1乘以后面的部分,只需要算后面的部分就可以可以了),第二次循环应从【n-2,0】(因为B[n-1]等于前面的部分乘以1,只需要算前面的部分就可以了)
接下来附上代码

class Solution {
public:
    vector<int> multiply(const vector<int>& A) {
        vector<int> B(A.size());
        if(A.size() <= 0){
            return B;
        }
        
        caculate(B,A);
        return B;
    }
    void caculate(vector<int> &B, const vector<int>& A){
        //下三角
        B[0] = 1;
        for(int i = 1; i < A.size(); ++i){
            B[i] = A[i - 1] * B[i - 1];
        }
        
        int temp = 1;
        //上三角
        for(int j = A.size() - 2; j >= 0; --j){
            temp *= A[j + 1];
            B[j] *= temp;
        }
        return;
    }
};


基于STM32设计的万能红外遥控器(学习型) 当前介绍了一种基于STM32微控制器设计的红外遥控器,支持接收解码功能和发送功能,可以将接收的码原样发送出去。 红外遥控器作为智能设备控制方式之一,在一定程度上满足了人们对于快速方便控制的需求。 当前设计的红外遥控器支持学习模式和发送模式。通过矩阵键盘上的数字键选择发送对应的控制码。 一共支持学习10个控制码,对应矩阵键盘上的数字。0~9。 阅读详情

相关推荐

034、特定场景优化(一):小目标检测的改进策略合集

本文针对工业场景中的小目标检测难题,提出了一套实战优化方案。首先从数据层面建议保持高分辨率输入(1024-1280像素)或采用切块训练策略,并适当放大标注区域。在网络结构上,提出减少下采样次数、增加高分辨率检测头、引入空间注意力机制等改进。损失函数方面推荐使用NWD匹配和QFL损失提升小目标敏感度。部署环节强调NMS优化、分辨率对齐和量化处理技巧。最后总结核心经验:优先优化数据质量而非模型结构,标注一致性比算法更重要,同时需为实际部署预留性能余量。硬件升级有时比算法调优更经济有效。

xiaoyaohou11的博客 650

构建乘积数组(C++)

题目: 给定一个数组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]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];) 思路: 题目要求不能使用除法...

Jerry_Leo_liu的博客 546

APK静态分析(取证角度)——理论部分

APP是指应用程序(Application),是指能够在手机、平板电脑、电脑等移动设备上运行的软件。APP可以帮助用户进行各种功能操作,如社交媒体、游戏、购物、学习、工作等。用户可以通过应用商店或者在线下载安装APP,然后在设备上使用它们。APP的种类非常丰富,能够满足用户不同的需求和兴趣。

currify的博客 3206

剑指offer-构建乘积数组(C++ 辅助空间)

构建乘积数组 给定一个数组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]。不能使用除法。(注意:规定B[0]=A[1]* A[2]* …* A[n-1], B[N-1]=A[0]* A[1]* … A[n-2])* 题解: 将B[i]=A[0]* A[1]* …* A[i-1]* A[i+1]* …* A[n-1]分解为:A[0]* A[1]* …* A[i-1]与A[i+1] …

qq_40552827的博客 211

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3840

Orcad 17.2导出PDF原理图终极指南:从Ghostscript安装到带属性书签配置

本文是Orcad 17.2导出高质量PDF原理图的终极指南。针对导出过程中常见的Ghostscript安装报错、软件卡死及版本兼容性问题,提供了详细的解决方案。重点推荐使用Ghostscript 9.53.3版本以确保最佳兼容性,并深入讲解了从安装配置、内存优化到高级书签属性设置的完整流程,帮助硬件工程师稳定、高效地生成带完整器件属性和导航书签的PDF文档。

weixin_29281915的博客 392

(C++)剑指offer-51:构建乘积数组(数组)

(C++)剑指offer-51:构建乘积数组 B[i]的意义是A数组不包括i位置的所有乘积,分为i左边的元素乘积和i右边的所有元素乘积。第一个for计算i左边的乘积,第二个for计算右边的。 初始化p=1,是因为0左边没有元素,所以乘积为1。时间复杂度为O(n),具体代码如下: class Solution { public: vector<int> multiply(cons...

qq_35264256的博客 186

SAP Workflow 工作流开发步骤总结

SAP WORKFLOW

qq_36952606的博客 5088

剑指Offer66.构建乘积数组 C++

给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…输出: [120,60,40,30,24]输入: [1,2,3,4,5]方法一:左右乘积列表。

zzzzyyyyy123456的博客 232

【从零开始入门unity游戏开发之——C#篇01】理论开篇,理解什么是编程

理论开篇,理解什么是编程

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3110

STM32入门教程:人脸识别

STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。

吃不胖. 374

剑指offer - 51 -- 构建乘积数组 - C++

题目描述 给定一个数组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]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];) 对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。 题解 题目描述:给定一个长度为n的数组A,求数组B,B[i] = A

小白_努力 220

光伏硅片瑕疵检测边缘计算方案:Java+YOLOv11n+GraalVM Native Image+树莓派5部署,工业级高可靠落地

本文提出了一种基于边缘计算的光伏硅片瑕疵检测方案,针对传统人工检测和云端AI方案的不足,采用Java+YOLOv11n+树莓派5的技术路线,实现了低延迟、高可靠的工业级检测。方案核心特点包括: 分层解耦的边缘架构,将感知、推理全链路下沉到树莓派5,端到端延迟<100ms; 创新性技术选型组合:Java 17+ONNX Runtime+GraalVM Native Image,内存占用<200MB; 安防级可靠性设计,支持断网缓存、看门狗守护、异常自动恢复等工业场景需求; 完全基于开源技术栈,硬件

2601_94871597的博客 474

剑指offer——构建乘积数组(c++)

题目描述 给定一个数组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] 思路 由于B[i] = (A[0] * A[1] * … * A[i-1]) * (A[i+...

SCS199411的博客 929

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

剑指offer 构建乘积数组(C++)

题目描述 给定一个数组A[0,1,...,n−1]A[0,1,...,n-1]A[0,1,...,n−1],请构建一个数组B[0,1,...,n−1]B[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]B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]B[i...

bwqiang的博客 251

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

剑指offer(C++)--构建乘积数组

题目 给定一个数组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]。不能使用除法。 class Solution { public: vector<int> multiply(const vector<int>& A) { ...

Courage-Hu的专栏 382

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

剑指offer(C++)-JZ66:构建乘积数组(算法-其他)

C++实现——构建乘积数组

翟天保的博客 4571

#数据结构与算法学习笔记#剑指Offer49:构建乘积数组(Java、C/C++)

2019.2.18 《剑指Offer》从零单刷个人笔记整理(66题全)目录传送门​​​​​​​ 既然规定了不能用除法,说明这道题肯定要取巧做。我们可以考虑一个矩阵Bm(),矩阵每一个对应一个乘积项,构建数组B的每一个元素相当于矩阵Bm每一行所有元素连乘的乘积。从而构建的矩阵形式如下: 例如数组B的第i个元素为矩阵Bm第i行所有元素的乘积(第i列元素用1代替)——B[i]=A[0]*...

NJU_ChopinXBP的博客 224

Leetcode刷题笔记(c++)_剑指 Offer 66. 构建乘积数组

大厂大厂我来啦,leetcode刷题!

LW_12345的博客 254

【刷题】2021最新剑指Offer汇总

新手村 关卡1-1 洛谷的第一个任务 超级玛丽游戏(洛谷-P1000):点击这里 A+B Problem(洛谷-P1001):点击这里

瑞新の博客:bennyrhys 6299

剑指Offer对答如流系列 - 构建乘积数组

文章目录面试题66:不用加减乘除做加法一、题目描述二、问题分析三、问题解答 面试题66:不用加减乘除做加法 一、题目描述 给定一个数组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]。不能使用除法。 二、问题分析 三、问题解答 ...

明月沉江春雾晓 3207

剑指offer之构建乘积数组

剑指offer之构建乘积数组 题目描述解题思路Code 题目描述 给定一个数组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]。不能使用除法。 解题思路 可以把乘积分成两部分,A[0]A[1]…A[i-1]和A[i+1]…*A[n-1],前一部分由前往后可以递推,后面部分则是由后往前递推。 ...

gq__97的博客 269

剑指 Offer 66. 构建乘积数组 c++

剑指Offer66.构建乘积数组 写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点 1. 双向遍历法 1.尝试自己想没想出来于是看答案,方法是两端遍历,分为两段,但是理解错题目了,有点难受。。 int up(int j) { if(j==0||j==1) return 1; return up(j-1)*j; }//尝试自己写了一个阶乘的递归数组,发现虽然很简单,但是自己写感觉也好慢。

y152543654的博客 284

构建乘积数组 python_每日算法题 | 剑指offer (3) 构建乘积数组

重磅干货,第一时间送达题目构建乘积数组题目要求给定一个数组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]。不能使用除法。解题思路为了方便理解题目,下面举个例子A=[1, 2 , 3, 4]B=[234, 134, 124, 123]如果可以用除法的话:那就比较容易了所以不能使用...

weixin_39966376的博客 363

【leetcode】剑指offer专项突击版详解(C++)

题目所在链接: leetcode剑指offer专项突击版 1. 整数 剑指 Offer II 002. 二进制加法 class Solution { public: string addBinary(string a, string b) { int carry = 0; string res; int i = a.size() - 1; int j = b.size() - 1; while(i >= 0 ||

froot的博客 3167

剑指offer之构建乘积数组C++解法

剑指offer之构建乘积数组C++解法 给定一个数组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]。不能使用除法。 B0 1 A1 A2 … An-2 An-1 B1 A0 1 A2 … An-2 An-1 B2 A0 A1 1 … An-2 An-1 … A0 ...

mbskypan的博客 519
上一篇: 剑指offer——数组中重复的数字(C++)
下一篇: 剑指offer——替换空格
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值