当前位置: 首页 > news >正文

网站建设和制作大连优化网站

网站建设和制作,大连优化网站,外贸自建站的推广方式,天津网站开发公司电话个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 前缀和(4)_除自身以外数组的乘积 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录…

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

前缀和(4)_除自身以外数组的乘积

收录于专栏【经典算法练习】
本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌

目录

1. 题目链接 :

2. 题目描述 :

3. 解法(一维前缀和) :

    算法思路 :

    代码展示 :

 进阶:

    结果分析 :


1. 题目链接 :

OJ链接: 除自身以外数组的乘积

2. 题目描述 :

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

示例 1:

输入: nums = [1,2,3,4]输出: [24,12,8,6]

示例 2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

提示:

  • 2 <= nums.length <= 105
  • -30 <= nums[i] <= 30
  • 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内

3. 解法(一维前缀和) :

    算法思路 :

注意题目的要求,不能使用除法,并且在O(N)的时间复杂度内完成该题.那么我们就不能使用暴力的解法,以及求出整个数组的乘积,然后除以单个元素的方法.

继续分析,根据题意,对于每一个位置的最终结果ret[i],它是由两部分组成的:

        1. nums[0] * nums[1] * ......* nums[i - 1]

        2. nums[i + 1]  * nums[1 + 2] * ...... * nums[n - 1]

于是,我们可以利用前缀和思想,使用两个数组pos和suf,分别处理出来两个信息:

        1. post表示: i位置之前的所有元素,即[0, i - 1]区间内所有元素的前缀乘积

        2. suf表示: i位置之后的所有元素,即[i + 1, n - 1]区间内所有元素的后缀乘积,然后处理最终结果

    代码展示 :

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> front_dp(n), back_dp(n);front_dp[0] = 1;back_dp[n - 1] = 1;for(int i = 1; i < n; i++)front_dp[i] = front_dp[i - 1] * nums[i - 1];for(int i = n - 2; i >= 0; i--)back_dp[i] = back_dp[i + 1] * nums[i + 1];vector<int> ret;for(int i = 0; i < n; i++)ret.push_back(front_dp[i] * back_dp[i]);return ret;}
};

 

 进阶:

你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int> ret(n, 1);//计算前缀和for(int i = 1; i < n; i++)ret[i] = ret[i - 1] * nums[i - 1];//计算后缀乘积与前缀乘积相乘int flag = 1;for(int i = n - 1; i >= 0; i--){ret[i] *= flag;flag *= nums[i];}return ret;}
};

 

    结果分析 :

优化说明

  1. 使用一个结果数组: 直接在 ret 数组中计算前缀乘积,后续再用一个变量 suffix 计算后缀乘积并更新 ret
  2. 空间复杂度: 最终的空间复杂度变为 O(1)(输出数组不算额外空间),因为我们只使用了一个额外的变量 suffix 来存储后缀乘积。

http://www.yayakq.cn/news/52274/

相关文章:

  • 网站的特效代码网站建设优化推广杭州
  • 做网站要用什么编程语言pc端兼手机端网站模板
  • k歌里的相片是通过网站做的吗驻马店手机网站制作
  • 做网站应该注意什么网站建设二次开发
  • 南京市公共资源建设中心网站从事网站开发方向
  • 业务员自己掏钱做网站可以吗广告片宣传片拍摄
  • 张家港做网站优化排名cms和wordpress
  • 做网站怎么融资成都网站制作芜湖厂商
  • 国内专业的室内设计网站商业网站平台
  • 手机网站模板更改吗帮做动态头像的网站
  • 广州比较好的广告公司有哪些重庆企业网站优化
  • asp.net是做网站的吗网站创建时间查询
  • 苏州市城乡和建设局网站网站建设怎么分好坏
  • 企业网站搭建步骤适合设计制作公司的网站asp远吗
  • wordpress站点设置使用时间论坛申请网站备案前置审批
  • 网站导航栏全屏怎么做的加盟招商网站建设方案
  • 六安网站建设推广宿迁建设局网站拆除备案
  • 门户网站维护外贸网站怎么做seo
  • 水利建设相关网站天津seo管理平台
  • 北京网站设计培训做一个网站要多长时间
  • 福州公司网站研发项目管理系统
  • 哪个旅游网站做的比较好网站优化排名软件网
  • 墓园网站建设价格打开网站提示建设中
  • 网站建设的基本要素台州公司做网站
  • 天河做网站哪家强wordpress 自动生成文章
  • 长沙cms模板建站保定百度网站建设
  • 安装php和mysql网站wordpress转phpcms
  • 网站seo查询制作网站专业公司哪家好
  • 网页设计与网站开发教程运用搜索引擎营销的案例
  • 做网站需要备注号码能制作视频的软件