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

news2024/12/26 12:04:49

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

给定一个数组 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[i] 以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定 B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2])

对于 A 长度为 1 的情况,B 无意义,故而无法构建,用例中不包括这种情况。

数据范围:1≤n≤10  ,数组中元素满足∣val∣≤10

示例:

输入:

[1,2,3,4,5]

返回值:

[120,60,40,30,24]

解题思路:

本题考察算法思维。如下图所示,已知A,求B。解题思路如下:

  1. B[n]=除了A[n]之外所有A乘积,那么基于下表可以将B的乘积序列以n为分界线,分为前后两部分。
  2. 先累积n之前的A,顺序执行,B[n]=B[n-1]*A[n-1]。
  3. 再累积n之后的A,倒序执行,B[n]=B[n]*temp,其中temp从1开始累积A,即temp=1*A[n-1]*A[n-2].......*A[1]。

测试代码:

class Solution {
public:
    // 乘积
    vector<int> multiply(vector<int>& A) {
        int size = A.size();
        vector<int> B(size, 1);
        // 累积n之前的A
        for(int i = 1; i < size; ++i){
            B[i] = B[i - 1] * A[i - 1];
        }
        // 累积n之后的A
        int temp = 1;
        for(int i = size - 1; i >= 0; --i){
            B[i] *= temp;
            temp *= A[i];
        }
        return B;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1084446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# +.Net C/S架构,在二甲医院全面实际使用三年的LIS系统源码

LIS系统源码技术细节&#xff1a; 体系结构&#xff1a;Client/Server架构 SaaS模式 客户端&#xff1a;WPFWindows Forms 服务端&#xff1a;C# .Net 数据库&#xff1a;Oracle 接口技术&#xff1a;RESTful API HttpWCF LIS检验系统一种专门用于医院化验室的计算机…

发稿渠道和发布新闻的步骤和技巧,收藏!

在现代社会中&#xff0c;新闻的发布和传播起着至关重要的作用。通过新闻&#xff0c;人们可以获取及时的信息&#xff0c;了解社会动态和事件发展。而对于企业和组织来说&#xff0c;通过新闻发布可以宣传品牌、推广产品&#xff0c;增加曝光度&#xff0c;吸引目标受众的关注…

【个人博客公网访问】使用Cpolar+Emlog在Ubuntu上轻松搭建个人博客公网访问

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

空开和浪涌保护器的关系及其行业应用解决方案

空开和浪涌保护器是两种常见的电气保护设备&#xff0c;它们各自有不同的工作原理、保护作用和保护范围&#xff0c;但在实际应用中&#xff0c;它们往往需要配合使用&#xff0c;以实现对电气设备和线路的全面保护。本文将介绍空开和浪涌保护器的基本概念、区别和联系&#xf…

JDK安装详细教程

JDK安装详细教程 国内大多数使用的是1.8的版本&#xff0c;对于初学者来说这个版本很友善&#xff0c;不过由于我安装过了1.8&#xff0c;所以我这里演示JDK21 的安装&#xff0c;过程并无区别&#xff0c;只在下载时注意选择1.8版本。1.8就是JDK8. 文章目录 JDK安装详细教程一…

面试了一个30岁的程序员,一个细节就看出来是培训班的····

首先&#xff0c;我说一句&#xff1a;培训出来的&#xff0c;优秀学员大有人在&#xff0c;我不希望因为带着培训的标签而无法达到用人单位和候选人的双向匹配&#xff0c;是非常遗憾的事情。 最近&#xff0c;在网上看到这样一个留言&#xff0c;引发了程序员这个圈子不少的…

内存存储 | 整形在内存中怎么存储呢 | 原码反码补码 | 大小端

整型在内存中的存储 整型在二进制中的表示形式有3种&#xff1a;原码、反码、补码。 正的整数&#xff1a;原码、反码、补码相同负的整数&#xff1a;原码、反码、补码要进行计算的 整数在内存中存储的是补码的二进制序列。 其中对于有符号整形来说&#xff0c;二进制中最高位是…

waf绕过——打狗棒法

前言 某狗可谓是比较好绕过的waf&#xff0c;但是随着现在的发展&#xff0c;某狗也是越来越难绕过了&#xff0c;但是也不是毫无办法&#xff0c;争取这篇文章给正在学习waf绕过的小白来入门一种另类的waf绕过。 环境的搭建&#xff1a; 环境的搭建就选择phpstudy2018安全狗最…

目标和00

题目链接 目标和 题目描述 注意点 只能向数组中的每个整数前添加 ‘’ 或 ‘-’返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目1 < nums.length < 200 < nums[i] < 10000 < sum(nums[i]) < 10001000 < target < 1000 解答…

3.5 数据更新

思维导图&#xff1a; 3.5.1 插入数据 **数据更新操作笔记** --- **概述&#xff1a;** 数据更新操作在SQL中主要包括三种&#xff1a;插入、修改和删除。以下主要集中于插入数据的操作。 --- **3.5.1 插入数据&#xff1a;** **1. 插入单一元组&#xff1a;** - 格式&am…

MySQL-DCL数据控制语言简要介绍

MySQL-DCL数据控制语言简要介绍 一、简介二、用户操作1、创建用户2、修改用户密码3、删除用户 三、权限控制1、权限说明2、显示用户权限3、授予权限4、撤销权限 一、简介 在MySQL中&#xff0c;DCL代表数据控制语言&#xff08;Data Control Language&#xff09;。DCL用于管理…

开发者职场“生存状态”大调研报告分析 - 第三版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

spark中使用flatmap报错:TypeError: ‘int‘ object is not subscriptable

1、背景描述 菜鸟笔者在运行下面代码时发生了报错&#xff1a; from pyspark import SparkContextsc SparkContext("local", "apple1012")rdd sc.parallelize([[1, 2], 3, [7, 5, 6]])rdd1 rdd.flatMap(lambda x: x) print(rdd1.collect())报错描述如…

Fastadmin/Tp5.0连接多个数据库

第一步先引入Config use think\Config; 第二步读取数据库配置 $db Config::get(database2); //读取第二个数据库配置 第三步连接数据库 $db Db::connect($config); 第四步对数据库进行操作 $data $db->name(admin)->find(); 新建的database2.php就是把原database…

冲量在线荣获2023中关村科学城科创大赛成长组TOP10优秀项目!

2023年9月15日&#xff0c;由市科委、中关村管委会&#xff0c;市发展改革委&#xff0c;市经济和信息化局联合指导的2023中关村科学城科创大赛圆满落下帷幕&#xff0c;该项赛事聚焦人工智能大模型&#xff0c;互联网3.0等前沿领域&#xff0c;吸引了国内外近300个优质项目报名…

【开源三方库】Fuse.js:强大、轻巧、零依赖的模糊搜索库

开源项目 OpenHarmony 是每个人的 OpenHarmony 曹天恒 公司&#xff1a;中国科学院软件研究所 小组&#xff1a;知识体系工作组 1.简介 Fuse.js 是一款功能强大且轻量级的 JavaScript 模糊搜索库&#xff0c;支持 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”…

vue3 自动下载使用 iconify图标以及自定义svg图标

开发中经常使用图标&#xff0c;通过unplugin-icons 插件我们可以在项目中自动下载所需的图标&#xff0c;但实际开发中我们还需要iconfont以及项目ui切图中的图标&#xff0c;这就需要使用自定义SvgIcon组件。具体操作步骤 一、安装包 npm i -D vite-plugin-svg-icons unplu…

Live800:未来的客户服务会发生哪些改变?

随着技术的不断进步和社会的不断发展&#xff0c;客户服务行业也在不断发生着变化。未来的客户服务将会发生哪些改变呢&#xff1f;以下是五个客户服务的预测&#xff0c;以期为企业的客服部门和经营者提供一些启示。 1、AI技术将会成为客户服务行业的核心 人工智能&#xff0…

冲量在线出席2023隐私计算大会,分享在大模型时代下隐私计算的最佳应用实践

隐私计算是数据要素可信流通的关键技术&#xff0c;是当下学术和产业研究的重要方向&#xff0c;也是助力我国数字经济发展的关键举措。为促进隐私计算发展&#xff0c;为隐私计算行业人群提供交流平台&#xff0c;7月26日&#xff0c;由中国信息通信研究院、中国通信学会联合主…

产品经理进阶:如何写商业计划书?

目录 简介 确定目标 确定目标市场 竞争分析 CSDN学院 作者简介 简介 很多时候&#xff0c;我们缺乏的并不是创意。 因为任何人都可能会萌发出一个好的创意。 但是&#xff0c;将想法变成可行的业务就完全是另一码事了。 你可能会认为你自己已经做好充分准备&#xff0…