剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组
难度:middle\color{orange}{middle}middle
题目描述
给定一个数组 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[i]B[i]B[i] 的值是数组 AAA 中除了下标 iii 以外的元素的积, 即 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]=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<=100000a.length <= 100000a.length<=100000
算法
(前缀和)
本题的难点在于 不能使用除法 ,即需要 只用乘法 生成数组 B 。根据题目对 B[i] 的定义,可列表格,如下图所示。
根据表格的主对角线(全为 1 ),可将表格分为 上三角 和 下三角 两部分。分别迭代计算下三角和上三角两部分的乘积,即可 不使用除法 就获得结果。

我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。
对于给定索引 i,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们更加具体的描述这个算法。
复杂度分析
-
时间复杂度:O(n)O(n)O(n),其中 nnn 是数组的长度。
-
空间复杂度 : O(n)O(n)O(n),其中 nnn 是数组的长度。
C++ 代码
class Solution {
public:vector<int> constructArr(vector<int>& a) {if (a.empty()) return vector<int>();int n = a.size();vector<int> b(n, 0);// 左边for (int i = 0, p = 1; i < n; i ++) {b[i] = p;p *= a[i];}//右边for (int i = n - 1, p = 1; ~i; i --) {b[i] *= p;p *= a[i];}return b;}
};
相关文章:
剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组 难度:middle\color{orange}{middle}middle 题目描述 给定一个数组 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[i]B[i]B[i] 的值是数组 AAA…...
1.1 误差的来源
不难发现,考察用计算机解决科学计算问题时所经历的几个环节(如图1-1所示),其中每一步都可能产生误差,首先,数学模型是通过对实际问题进行抽象与简化得到的,它与实际问题之间有误差.数学模型与实…...
python进程间通信
进程间通信表示进程之间的数据交换。 为了开发并行应用程序,需要在进程间交换数据。 下图显示了多个子过程之间同步的各种通信机制 - 各种通信机制 队列 队列可以用于多进程程序。 多处理模块的Queue类与Queue.Queue类相似。 因此,可以使用相同的API…...
麒麟Linux操作系统磁盘策略永久调整为deadline
1.前言在安装数据库,比如达梦数据库时,为获取磁盘最佳性能,一般要将数据磁盘设置为deadline。2. 修改磁盘调度算法2.1临时修改假设磁盘为sda,echo deadline > /sys/block/sda/queue/scheduler2.2通用机永久修改grubby --update-kernelALL …...
yum安装Docker(CentOS7.9)
目录 一、安装环境 编写yum源(根据系统版本) 二、安装docker-ce 默认安装docker-ce是最新版本 ps:安装不成功则需要安装container-selinux,下载网络yum源,再安装docker-ce即可 #查看dcoker-ce所产生的文件路径 三、启动docker 四、配置镜像加速器…...
c++错误 free(): double free detected
记一次bug调试。。。。 我定义了一个类,测试的时候,调用它的方法出现了free(): double free detected ,但是调用其他方法是正常的。这个错误,字面意思就是检测到了双重释放。是指对于同一块内存,释放了两次。 我的类…...
12升400V 升压DC-DC高压脱毛仪解决方案SC3671
ipl(intense pulsed light,强脉冲光)脱毛,也叫光子脱毛,是市场上的一种新型脱毛技术和美容方法,其利用强脉冲光特殊的波长和光热效应实现破坏毛囊并达到永久脱毛的效果,具有速度快,效果好,安全性…...
h264格式分析
h264格式分析一.简介二.h264编码原理1.帧间压缩2.帧内压缩三.编码结构1.IDR帧2.解码顺序四.NALU1.nalu头信息2.annexb模式一.简介 h264是一种视频编码标准,又叫Advanced Video Codec,即AVC 二.h264编码原理 1.帧间压缩 通过I、B、P帧实现帧间压缩 I…...
【数据分析师求职面试指南】实战技能部分
文章目录必备技能数据人员如何创造价值完整的指标体系构建数据监控集报表设计设计一份优质的数据分析报告基于互联网大数据的应用A B 测试用户画像完整的数据挖掘项目流程1. 分析问题,明确目标2.模型可行性分析3.选取模型4.选择变量5.特征工程6.建立模型&效果…...
树与二叉树(二叉树的表示,性质,遍历,还原)
基本术语:A(或B)是I的祖先,I是A(或B)的子孙;D是I的双亲,I是D的孩子;节点的孩子个数称为节点的度;树中节点的最大度数称为树的度;度大于0的节点称为…...
mysql 源码学习理解记录--lock_rec_move
记录源码学习笔记,如有错误,还请帮忙指正。 Lock_rec_move 函数使用场景之用于update Update 匹配条件时会用lock_rec_lock先加锁。然后再进行ha_update_row 操作。 在修改时,当修改的字段前后长度不一致时,会导致不能原地修改…...
markdown(.md)常用语法
markdown(.md)常用语法markdown常用语法常用目录标题分割线格式空格换行无序列表有序列表列表嵌套文字引用行内代码代码块字体转义斜体加粗删除线下划线功能链接todo listtypora插入图片并保存在本地包含了一些常用的MD语法和操作,语法不是很…...
千言数据集赛题介绍
赛题题目 通用信息抽取任务评测 将多种不同的信息抽取任务用统一的通用框架进行描述,着重考察相关技术方面在面对新的、未知的信息抽取任务与范式时的适应和迁移能力。 赛题介绍 信息抽取旨在将非结构化文本中的信息进行结构化,是自然语言处理的基础…...
信息技术最全总结(备考教资)
信息技术 备考教资信息技术知识点总结,欢迎收藏!需要xmind和备考书籍的可以评论区留言。 第一部分-学科专业知识 第一章-信息技术基础知识 信息与信息技术概述 信息概述 信息的定义 信息本身不是实体信息是通过文字、数字、图像、图形、声音、视频等方…...
opencv识别车道线(霍夫线变换)
目录1、前言2、霍夫线变换2.1、霍夫线变换是什么?2.2、在opencv中的基本用法2.2.1、HoughLinesP函数定义2.2.2、用法3、识别车道3.1、优化3.1.1、降噪3.1.2、过滤方向3.1.3、截选区域3.1.4、测试其它图片图片1图片2图片31、前言 最近学习opencv学到了霍夫线变换&am…...
MySQL的同步数据Replication功能
MySQL提供了Replication功能,可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库(master),后者则被称从库(slave)。MySQL复制过程采用异步方式,但延时非常小,秒级…...
2023年全国最新高校辅导员精选真题及答案17
百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.完善大学生的自我意识,我们可以采取的措施是()。 …...
中文代码92
PK 嘚釦 docProps/PK 嘚釦諿hl | docProps/app.xml漅Mo?糤?皘幅H??Q州濾mじ沜咅K宩Z5~q矹阶浇?灭貄}鰜>hk?i灐Q墩娲蝊毲b檊!J邮?\鏶 鵉苻牢[?j Y?a漺1簕B傟p悺L睮恃鶤?龎劂Q|瓣} A??苷0???5m?髤咄佶?\/#姧1N_??熹 冟.琽僠糧固Pw襅…...
Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现
Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、说明 假设这个是采集到的海量文本标题: 现在要判断找到的这个标题 title = "拜登称特朗普拒绝承认选举…...
模型杂谈:快速上手元宇宙大厂 Meta “开源泄露”的大模型(LLaMA)
本篇文章聊聊如何低成本快速上手使用 Meta(Facebook)的开源模型 LLaMA。 写在前面 在积累点赞,兑现朋友提供的显卡算力之前,我们先来玩玩“小号的”大模型吧。我相信 2023 年了,应该不需要再赘述如何使用 Docker 干净…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
