数据结构学习 jz66 构建乘积数组

关键词:数学 双指针

方法一:这个题目我一开始做不知道不能用除法。我做的:[ 用时: 12 m 12 s ] 用了除法 分类讨论

方法二:后来看了提示,双指针,两边各开始乘。

方法三:然后又看了答案可以节省空间。

题目:按规则计算统计结果

方法一:

用了除法 分类讨论

思路:

统计是否有零,不然没法除。

count_0//如果有0,那么true

求所有数的乘积:

res记录所有数(除了第一个遇到的0)的乘积结果。

如果只有一个0,那么除了它以外的数的乘积就是res。

如果有超过一个0,那么全部结果都是0。

        for(const auto&x:arrayA){if(x==0&&count_0==0){count_0++;continue;}res*=x;}

求结果:

如果没有0,那么正常除。

如果有0,则0那个位置的结果就是res,除了0以外的数的结果都是0。

        for(const auto&x:arrayA){if(count_0==0)arrayB.push_back(res/x);else{if(x==0)arrayB.push_back(res);elsearrayB.push_back(0);  }}

复杂度计算:

时间复杂度O(n)

空间复杂度O(1)

代码:

class Solution {
public:vector<int> statisticalResult(vector<int>& arrayA) {int res=1;int count_0=0;for(const auto&x:arrayA){if(x==0&&count_0==0){count_0++;continue;}res*=x;}vector<int> arrayB;for(const auto&x:arrayA){if(count_0==0)arrayB.push_back(res/x);else{if(x==0)arrayB.push_back(res);elsearrayB.push_back(0);  }}return arrayB;}
};

方法二:

看了答案的提示:左右两边各开始乘,得到从左到右和从右到左的两个向量

思路:

用两个向量记录从左到右累积和从右到左累积的结果。

然后求res的时候,左右各乘结果。

arrayA

2

3

4

5

6

l2r

2

2*3

2*3*4

2*3*4*5

2*3*4*5*6

r2l

6

6*5

6*5*4

6*5*4*3

6*5*4*3*2

res

R2l[3]

l2r[0]*r2l[2]

l2r[1]*r2l[1]

l2r[2]*r2l[0]

l2r[3]

复杂度计算:

时间复杂度O(n)

空间复杂度O(n) 2n,两个向量存累积结果

 代码:

class Solution {
public:vector<int> statisticalResult(vector<int>& arrayA) {vector<int> res;if(arrayA.empty()) return res;if(arrayA.size()==1) return arrayA;vector<int> l2r,r2l;l2r.push_back(arrayA[0]);//初始化r2l.push_back(arrayA[arrayA.size()-1]);//初始化for(int i=1;i<arrayA.size();++i)//左到右累积{l2r.push_back(l2r[i-1]*arrayA[i]);}for(int i=1;i<arrayA.size();++i)//右到左累积{r2l.push_back(r2l[i-1]*arrayA[arrayA.size()-i-1]);}for(int i=0;i<arrayA.size();++i)//求res{int temp=1;if(i>0) temp*=l2r[i-1];//如果i=0,就不用左边if(i<arrayA.size()-1) temp*=r2l[arrayA.size()-i-2];//如果i在最右边,就不用右边res.push_back(temp);}return res;}
};

方法三:

看了k神的答案写的 和方法二一样但节省了空间

思路:

具体看k神的图解。

主要是先乘下三角,再乘上三角,即可。

下三角:

上三角:

复杂度计算:

时间复杂度O(n)

空间复杂度O(1) 

代码:

class Solution {
public:vector<int> statisticalResult(vector<int>& arrayA) {vector<int> res;if(arrayA.empty()) return res;if(arrayA.size()==1) return arrayA;res.push_back(1);for(int i=1;i<arrayA.size();++i)//下三角{res.push_back(res[i-1]*arrayA[i-1]);}int temp=1;for(int i=arrayA.size()-2;i>=0;--i)//上三角{temp*=arrayA[i+1];res[i]*=temp;}return res;}
};

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

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

相关文章

利用Java的加锁文件机制实现只运行一个进程实例

public static void main(String[] args) { if(isStarted()) { JOptionPane.showMessageDialog(null, "软件正在运行中"); System.exit(0); } //start app; } private static FileLock lock null; // 判断该应用是…

vue 使用mock模拟数据

vue 使用mock模拟数据 安装依赖 cnpm install axios --save cnpm install mockjs --save-dev cnpm install json5 --save-dev在根目录下&#xff0c;新建一个mock文件&#xff0c;且创建如下文件 utils.js index.js const Mock require(mockjs) const { param2Obj } …

基于selenium的pyse自动化测试框架

介绍&#xff1a; pyse基于selenium&#xff08;webdriver&#xff09;进行了简单的二次封装&#xff0c;比selenium所提供的方法操作更简洁。 特点&#xff1a; 默认使用CSS定位&#xff0c;同时支持多种定位方法&#xff08;id\name\class\link_text\xpath\css&#xff09…

【电脑技巧】Win11关闭自动更新

要想彻底关闭Windows电脑的自动更新&#xff0c;仅仅从系统设置里面选择暂停更新是完全不够用的&#xff0c;只有将windows自动更新的服务关闭掉&#xff0c;才能有效阻止其更新。 关闭win11电脑自动更新的办法&#xff0c;具体操作如下&#xff1a; 1.在winr运行框中输入servi…

8 微信小程序支付

8 微信小程序支付 9 微信小程序支付概述1.沙箱环境2.微信小程序支付2.1 微信小程序平台2.2 商户平台账号&#xff08;企业&#xff09;2.3 账号 3. 微信支付的步骤4.案例4.1 用户登录4.2 支付4.3 微信通知 9 微信小程序支付概述 各位小伙伴想要博客相关资料的话关注公众号&…

vue3中,vue-echarts基本使用(柱状图、饼图、折线图)

注意&#xff1a;vue-echarts在使用前要先安装echarts&#xff0c;不要只安装vue-echarts这一个 echarts官网地址&#xff1a;Apache EChartsApache ECharts&#xff0c;一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xf…

几个Python小案例,爱上Python编程!

Python是一种面向对象的解释型编程语言&#xff0c;源代码与解释器CPython遵守GPL协议&#xff0c;Python语法简洁清晰。 语法简洁清晰&#xff0c;那么我们用少量的Python代码能做哪些有趣的东西&#xff1f;温馨提示&#xff1a;文末必看。 一、画爱心表白 1、图形都是由一…

微软Power Platform使用Canvas app画布应用添加自定义连接器调用外部API展示数据

微软Power Platform使用Power Apps的Canvas app画布应用添加自定义连接器&#xff0c;调用外部API展示数据 目录 微软Power Platform使用Power Apps的Canvas app画布应用添加自定义连接器&#xff0c;调用外部API展示数据1、在Power Apps中找到自定义连接器2、创建一个空白的自…

CentOS7中将MySQL注册为系统服务开机启动

实际生产环境中为了避免重启服务器后所有的服务都手动启动带来的麻烦&#xff0c;建议所有基础服务都设置为开机自动启动。本章节我们主要演示在Centos7中如何将MySQL注册为系统服务&#xff0c;并实现开机自动启动。 ① 手动启动mysql&#xff0c;查看进程信息&#xff0c;复制…

XTuner 微调 课程学习

大语言模型于海量的文本内容上&#xff0c;以无监督和半监督的方式进行训练的 模型微调的目的&#xff1a;使其在具体的使用场景或领域中输出更好的回答 增量预训练——给模型喂新的领域知识&#xff1b; 指令跟随或指令微调—— 基于海量的预训练数据训练出来的模型通常叫做…

SD-WAN解决跨国公司海外工厂网络安全问题

在跨境业务蓬勃发展的今天&#xff0c;越来越多的大型企业出于人力成本的考虑&#xff0c;在人力成本较低的发展中国家建立工厂。然而&#xff0c;传统基于路由器的网络架构已无法为这些跨国企业提供可靠的安全网络。那么&#xff0c;如何解决跨国企业海外工厂的网络难题呢&…

关于Python —— Python教程

开始 Python 是一个易于学习、使用和高效阅读的编程语言。它具有简洁的英文语法&#xff0c;编写更少的代码&#xff0c;让程序员专注于业务逻辑而不是语言本身。 本教程将从深度、专注细节上去理解 Python 这门语言。初学者可以参考此教程理解相应的内容&#xff0c;本教程将…

选中图层为什么不能建立3D模型---模大狮模型网

在Photoshop CC 2021(也就是PS6)中&#xff0c;要将选中的图层转换为3D模型&#xff0c;需要满足以下几个条件&#xff1a; 图层类型支持&#xff1a;只有特定类型的图层可以被转换为3D模型。通常&#xff0c;普通的像素图层、矢量图层和形状图层都可以进行转换。但是&#xff…

软件测试|Python数据可视化神器——pyecharts教程(十二)

使用pyecharts绘制关系网图 简介 关系网图是一种可视化工具&#xff0c;用于展示各个元素之间的关联关系。在数据分析和可视化中&#xff0c;关系网图通常用于展示网络、社交关系、知识图谱等方面的数据。Pyecharts 是一个功能强大的 Python 数据可视化库&#xff0c;可以轻松…

003-90-14【SparkSQLDFDS】龙井村寸头二大爷家女儿小红用GPT 学习DataFrame 的创建和使用--入门教程

【SparkSQL&DF&DS】DataFrame 的创建和使用 【SparkSQL&DF&DS】2,DataFrame 的创建和使用1, 创建2&#xff0c; show3, printSchema4, select...show5, filter6&#xff0c; group by...count7&#xff0c;创建局部视图和全局视图8&#xff0c;spark sql 【Spa…

【INTEL(ALTERA)】错误 (19021):相同的文件名 xx 用于不同的 IP 文件。同一个名称不能用于多个 IP 文件。

说明 由于在英特尔 Quartus Prime Pro Edition 软件版本 22.3 上运行 CVP 设计时出现问题&#xff0c;使用 IP 升级工具自动更新复位释放英特尔 FPGA IP可能会导致同一 IP 的 .qip 和 .ip 文件包含在英特尔 Quartus设置文件中。这将产生如下所示的错误。 错误 &#xff08;19…

Kotlin 协程 asyn和launch简单使用

在 Kotlin 协程中&#xff0c;async 和 launch 都是协程构建器&#xff0c;但它们有一些重要的区别&#xff1a; 返回值&#xff1a; launch 函数返回一个 Job 对象&#xff0c;代表一个在后台执行的任务。Job 可以用于等待任务完成、取消任务等操作。async 函数返回一个 Defer…

x-cmd pkg | howdoi - 用于替代浏览器搜索编程问题的命令行工具

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 howdoi 一个在终端中查找编程问题的命令行工具和 python 库&#xff0c;可用于从堆栈溯源&#xff08;Stack Overflow&#xff09;等编程社区获取搜索问题的答案&#xff0c;并将它们以代码片段的形式显示在命令行中。…

使用记事本修复DBC文件问题V2.0

没想过这种文章也能出第二篇&#xff0c;有个信号没解析出来。 问题现象 回放报文的时候发现需要的信号没有解析出来&#xff0c;报文一共有10个信号&#xff0c;只出来9个。 问题分析 首先就是排查DBC文件&#xff0c;在对应的报文里面有没有这个信号。发现是有的&#xff…

POI-tl 知识整理:整理5 -> 开发一个插件

实现一个插件就是要告诉我们在模板的某个地方用某些数据做某些事情&#xff0c;我们可以通过实现RenderPolicy接口开发自己的插件 模板 1 写一个将标签替换为Hello, world的插件 import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.policy.RenderPolicy; import…