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

做网站番禺网站外链购买平台

做网站番禺,网站外链购买平台,购物网站有哪些模块,网站如何做品牌宣传海报除自身以外数组的乘积 题目描述: 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请…

除自身以外数组的乘积

题目描述:

        给你一个整数数组 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 位 整数范围内

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

方法一思路分析:

  1. 初始化左右乘积数组
    • 创建两个辅助数组 L 和 R,长度与输入数组 nums 相同。L[i] 用于存储 nums[i] 左侧所有元素的乘积,R[i] 用于存储 nums[i] 右侧所有元素的乘积。
  2. 计算左侧乘积
    • 初始化 L[0] 为 1,因为第一个元素左侧没有元素。
    • 从左到右遍历 nums,计算每个位置的左侧乘积并存储在 L 数组中。
  3. 计算右侧乘积
    • 初始化 R[length - 1] 为 1,因为最后一个元素右侧没有元素。
    • 从右到左遍历 nums,计算每个位置的右侧乘积并存储在 R 数组中。
  4. 计算最终结果
    • 创建一个结果数组 answer,长度为 nums 的长度。
    • 对于 nums 中的每个元素,其除了自身以外所有元素的乘积就是其左侧所有元素的乘积乘以右侧所有元素的乘积。即 answer[i] = L[i] * R[i]
  5. 返回结果
    • 返回 answer 数组作为最终结果。

代码实现:

class Solution {public int[] productExceptSelf(int[] nums) {int length = nums.length;// L 和 R 分别表示左右两侧的乘积列表int[] L = new int[length];int[] R = new int[length];int[] answer = new int[length];// L[i] 为索引 i 左侧所有元素的乘积// 对于索引为 '0' 的元素,因为左侧没有元素,所以 L[0] = 1L[0] = 1;for (int i = 1; i < length; i++) {L[i] = nums[i - 1] * L[i - 1];}// R[i] 为索引 i 右侧所有元素的乘积// 对于索引为 'length-1' 的元素,因为右侧没有元素,所以 R[length-1] = 1R[length - 1] = 1;for (int i = length - 2; i >= 0; i--) {R[i] = nums[i + 1] * R[i + 1];}// 对于索引 i,除 nums[i] 之外其余各元素的乘积就是左侧所有元素的乘积乘以右侧所有元素的乘积for (int i = 0; i < length; i++) {answer[i] = L[i] * R[i];}return answer;}
}

方法二思路分析:

        题目进阶要求在 O(1) 的额外空间复杂度内完成这个题目,且输出数组不算额外空间。所以可以考虑用一个变量代替数组的使用,变量为右侧所有元素的乘积。

  1. 计算每个元素左侧所有元素的乘积
    • 创建一个与原数组相同长度的新数组 answer,用于存储结果。
    • 初始化 answer[0] 为 1,因为第一个元素左侧没有其他元素。
    • 从第二个元素开始遍历原数组,每个位置 i 的 answer[i] 等于 nums[i - 1] 乘以 answer[i - 1]。这样,answer[i] 就存储了原数组中索引 i 左侧所有元素的乘积。
  2. 计算每个元素右侧所有元素的乘积,并更新结果数组
    • 初始化一个变量 R 为 1,用于存储当前元素右侧所有元素的乘积。
    • 从原数组的最后一个元素开始向左遍历。
    • 对于每个元素,将其左侧乘积(即 answer[i])与右侧乘积 R 相乘,得到的结果就是除了 nums[i] 以外的所有元素的乘积,并更新 answer[i]
    • 更新 R,将其乘以当前遍历到的元素 nums[i],以便计算下一个元素的右侧乘积。

举一个具体的例子来说明:

假设我们有一个整数数组 nums = [1, 2, 3, 4]

  1. 计算每个元素左侧所有元素的乘积

    • 初始化结果数组 answer = [0, 0, 0, 0]
    • answer[0] 设置为 1,因为第一个元素左侧没有其他元素。
    • 计算 answer[1]answer[1] = nums[0] * answer[0] = 1 * 1 = 1
    • 计算 answer[2]answer[2] = nums[1] * answer[1] = 2 * 1 = 2
    • 计算 answer[3]answer[3] = nums[2] * answer[2] = 3 * 2 = 6

    此时,answer = [1, 1, 2, 6]。这个数组存储了每个元素左侧所有元素的乘积。

  2. 计算每个元素右侧所有元素的乘积,并更新结果数组

    • 初始化变量 R = 1,用于存储当前元素右侧所有元素的乘积。
    • 从右向左遍历 nums 数组。
    • 对于 nums[3](即 4):answer[3] = answer[3] * R = 6 * 1 = 6,然后 R = R * nums[3] = 1 * 4 = 4
    • 对于 nums[2](即 3):answer[2] = answer[2] * R = 2 * 4 = 8,然后 R = R * nums[2] = 4 * 3 = 12
    • 对于 nums[1](即 2):answer[1] = answer[1] * R = 1 * 12 = 12,然后 R = R * nums[1] = 12 * 2 = 24
    • 对于 nums[0](即 1):answer[0] = answer[0] * R = 1 * 24 = 24

    最终,answer = [24, 12, 8, 6]。这个数组就是除了自身以外所有元素的乘积。

代码实现:

class Solution {public int[] productExceptSelf(int[] nums) {int length = nums.length;int[] answer = new int[length];// answer[i] 表示索引 i 左侧所有元素的乘积// 因为索引为 '0' 的元素左侧没有元素, 所以 answer[0] = 1answer[0] = 1;for (int i = 1; i < length; i++) {answer[i] = nums[i - 1] * answer[i - 1];}// R 为右侧所有元素的乘积// 刚开始右边没有元素,所以 R = 1int R = 1;for (int i = length - 1; i >= 0; i--) {// 对于索引 i,左边的乘积为 answer[i],右边的乘积为 Ranswer[i] = answer[i] * R;// R 需要包含右边所有的乘积,所以计算下一个结果时需要将当前值乘到 R 上R *= nums[i];}return answer;}
}

http://www.hrbkazy.com/news/6161.html

相关文章:

  • 北京建网站的价格有什么可以做推广的软件
  • 有没有专门搞网站上线的公司百度官方电话
  • 建设银行的网站为什么这么卡seo平台是什么意思
  • flash成品网站爱网站查询
  • 常州网站建设平台代写企业软文
  • 做外贸免费发布产品的网站北京seo推广优化
  • 专业做ea的网站注册网站怎么注册
  • 网站关键字推广自主建站
  • 网站建设怎么做分录关键词的选取原则有
  • html网页设计网站石家庄百度推广优化排名
  • 网站系统安全性软文广告营销
  • 榆林城乡建设规划官方网站鼓楼网站seo搜索引擎优化
  • 支付网站怎么做seo的内容有哪些
  • 旅游网站建设报价单网站优化助手
  • 芷江建设局网站网站排名推广软件
  • 杭州模板网站建设百度点击软件名风
  • 做金融的免费发帖的网站有哪些关键词排名点击工具
  • 怎样重启网站服务器服务器域名查询
  • 网站域名注册人与icp备案运营人必须统一亚马逊提升关键词排名的方法
  • 12306网站制作地推拉新app推广接单平台免费
  • 广州市城市建设网站谷歌网站网址
  • 怎么用dw做简单网站百度seo系统
  • 网站用哪个做网络推广渠道和方法
  • 做代购在哪个网站进货竞价排名是什么
  • 电子配件 技术支持 东莞网站建设网络营销名词解释答案
  • 分销系统 wordpressseo与网络推广的区别和联系
  • 绵阳市建设局网站营销qq官网
  • 外贸营销员国家职业技能标准网站优化推广方案
  • 有了域名自己电脑怎么做网站都有什么推广平台
  • 私人定制网站建设软文网站大全