首页
学习
活动
专区
圈层
工具
发布

除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...示例 1: 输入: nums = [1,2,3,4] 输出: [24,12,8,6] 示例 2: 输入: nums = [-1,1,0,-3,3] 输出: [0,0,9,0,0] 我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案...,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。...对于给定索引 iii,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们更加具体的描述这个算法。 算法     初始化两个空数组 L 和 R。...对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积。     我们需要用两个循环来填充 L 和 R 数组的值。

37130

除自身以外数组的乘积(LeetCode 238)

1.问题描述 给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...可以先计算给定数组所有元素的乘积,然后对数组中的每个元素 x,将乘积除以 x 求得除自身值以外的数组乘积。 然后这样的解决方法有一个问题,就是如果输入数组中出现 0,那么这个方法就失效了。...时间复杂度: O(n^2),需要两层遍历,第一层为遍历数组中的每一个元素,第二层是遍历数组中除当前元素的其他所有元素。 空间复杂度: O(1)。...对于给定索引 i,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。 具体步骤如下: 初始化两个空数组 L 和 R。...除自身以外数组的乘积 - LeetCode

33910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    除自身以外数组的乘积

    题目: 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之 外其余各元素的乘积。...示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。...( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)...Related Topics 数组 前缀和 二.思路: 把当前数组分成数字左边和数字右边两个部分 然后进行两次遍历 第一次遍历求出当前数字左边数字的积 第二次遍历求出当前数字右边数字的积 注意,好好利用一个初始乘积为...1,然后左边的积就从左边开始,右边的积是用右边开始 参考如下 原数组: [1 2 3 4] 左部分的乘积: 1 1 1*2

    45520

    除自身以外数组的乘积

    题目 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...对此由以下解法: 算法一(摘自LeetCode官方解法): 初始化两个空数组 L 和 R。对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积。...使用了 L 和 R 数组去构造答案,L 和 R 数组的长度为数组 nums 的大小。 算法二:共享数组方式 整体思路和官方解题思路相同:左乘*右乘。...定义返回数组 returnNums 并将其看作共享数组,同时从左右两端填充数据;之后定义 left,right 来存储左右乘积并循环迭代更新。...空间复杂度:O(1),题目中所述,返回数组的空间不算,故所使用的额外存储空间为 left 和 right。故只有常数级别的空间复杂度。

    52610

    LeetCode-238-除自身以外数组的乘积

    # LeetCode-238-除自身以外数组的乘积 题目来自于力扣https://leetcode-cn.com/problems/product-of-array-except-self 给你一个长度为...n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...# 解题思路 我们先假设可以使用除法,那么解题的思路可以为,先计算出所有元素的连续乘积,然后利用最后一个位置的总乘积除以当前元素本身的值就可以得到结果,但是这种情况没有考虑除数为0的情况,且由于题目不允许使用除法...*方法1、乘积结果=当前数左边的乘积(前缀)当前数右边的乘积(后缀) 由于结果的值为除当前值之外的乘积,所以可以利用2个数组来记录当前值左侧的乘积和当前值右侧的乘积,两个乘积结果再进行一次对应位置相乘即为排除当前位置数的所有元素乘积...方法2、进阶优化: 题目规定存储答案的数组不算空间,所以进阶方法尝试能不能用一个答案数组就可以完成上面三个数组的操作。

    51710

    leetcode刷题(118)——除自身以外数组的乘积

    给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...题解: 我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。...方法一:左右乘积列表 1.初始化两个空数组 L 和 R。对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积。...算法 1.初始化 answer 数组,对于给定索引 i,answer[i] 代表的是 i 左侧所有数字的乘积。...空间复杂度:O(1),输出数组不算进空间复杂度中,因此我们只需要常数的空间存放变量。

    40520

    除自身以外数组的乘积

    一、题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度内完成此题。... nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内 三、解题思路 根据题目要求,我们需要计算出数组nums中,每个元素除自己之外的乘积值,即假设nums包含4个元素,分别为nums...所以,为了解决这个问题,我们可以看下面这个图,在这个图中白色的格子表示不参与计算,那么正好可以分割为左下角和右上角两部分数字集合,具体情况请见下图所述: 图片 针对上面的分析,我们可以分为两部分对数组nums...进行计算操作: 【正向遍历数组】 这种遍历方式,我们可以来计算左下角的数字乘积; 【逆向遍历数组】 这种遍历方式,我们可以来计算右上角的数字乘积(用temp保存),然后与左下角再执行相乘操作; 好了,如上就是本题的解题思路了

    46120

    【数据结构和算法】除自身以外数组的乘积

    一、题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度内完成此题。...( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。) 二、题解 思路与算法: 本题的难点在于 不能使用除法 ,即需要 只用乘法 生成数组 ans 。...计算 ans[i] 的 下三角 各元素的乘积,直接乘入 ans[i] 。 计算 ans[i] 的 上三角 各元素的乘积,记为 tmp ,并乘入 ans[i] 。 返回 ans 。...空间复杂度 O(1) : 变量 tmp 使用常数大小额外空间(数组 ans 作为返回值,不计入复杂度考虑)

    25510

    LeetCode每日一题之 除自身以外数组的乘积

    . - 力扣(LeetCode) 算法原理: 这道题其实和我上一道题非常相似---寻找数组的中心下标,也是使用前缀和的思想,而这里需要改用前缀积: 所以我们创建前缀积数组f,后缀积数组g: f[i]表示...nums数组(0~(i-1))所有元素的积。...(除自身外的前缀积)f[i]=f[i-1]*nums[i-1] g[i]表示nums数组((i+1)~(n-1))所有元素的积。...(除自身外的后缀积) g[i]=g[i+1]*nums[i+1] 特殊位置处理: f[0]和g[n-1],这两个位置要特殊处理一下,f[0]表示数组nums 0号位之前元素的积,可它之前没有元素,之前题目前缀和时我们都将它置为...0,但这里不同,如果还是置为0的话,因为0乘任何数都是0,就会导致整个前缀积数组都变成0,所以为了不让它对后面的元素产生影响,我们应该把它置为1,g[n-1]同理。

    17310

    前缀和-238-除自身以外数组的乘积-力扣(LeetCode)

    一、题目解析 1.answer[i]等于nums[i]中除nums[i]之外其余各元素的乘积 2.前缀元素和后缀的乘积在32位整数范围内(也就是不会超出int,暗示使用前缀和思想)  3.不要使用除法,...时间复杂度为O(N) 二、算法原理 解法1:暴力解法 固定一个数i,然后依次计算[0,i-1],[i+1,n-1]内所有元素的乘积,时间复杂为O(N^2) 解法2:前缀和思想(前缀积) 通过前缀积数组和后缀积数组的预处理...,ans[i]=f[i]*g[i];但是我们能发现f[0]和g[n-1]的值是等于1的,举例ans[0]=f[0]*g[0],g[0]表示[1,n-1]内所有元素的积,符合要求,所以f[0]=1;g[n...-1]同理 三、代码示例 由于解法1时间复杂度为O(N^2)会超时,所以只展示解法2的代码 解法2: class Solution { public: vector productExceptSelf

    8910

    C语言题解——除自身以外数组的乘积(力扣 第238题)

    空间开辟   我们会用到malloc函数进行动态内存开辟,这样无论它传过来多大的数组,我们都可以得到足够的空间(因为要返回这片空间,所以我们不进行内存释放) 关于题目中给定的变量 *nums 就是指向原数组的指针...,可以通过它的偏移访问到原数组中不同的元素 numsSize 是原数组的长度(个数) *returnSize 是我们目标数组的长度指针,因为0也会放入目标数组中,因此我们的两个数组长度都是一样的,这里直接赋值即可...具体代码实现 代码没有多少,就是赋值、开辟、判断 当然我们这里需要用块空间(因为其中包含了目标数组),所有我们不对其进行释放!...源码 下面是原码展示 //力扣 23.除自身以外数组的乘积 //左右互乘法 #include int* productExceptSelf(int* nums, int numsSize...除自身以外数组的乘积 - 力扣(LeetCode) 前面提到的malloc标准相关的网站为C Plus Plus,是一个国外网站,但访问速度不错,可惜全英文。

    47810

    2021-10-29:除自身以外数组的乘积。给你一个长度为

    2021-10-29:除自身以外数组的乘积。...给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 outputi 等于 nums 中除 numsi 之外其余各元素的乘积。示例:输入: 1,2,3,4。...提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)力扣238。 答案2021-10-29: 方法1:先遍历求后缀基,再遍历求前缀基。 方法2:分三种情况。 2.1.数组中无零。...将所有数就乘积,然后遍历,做除法。除法改成位运算,就符合题意了。 2.2.数组中有1个零。除了值为0的位置的数是其他数的积,其他位置是0。 2.3.数组中有2个零。结果全零。 时间复杂度:O(N)。

    42010

    如何快速计算文件中所有数字的总和?

    问题:我有一个包含数千个数字的文件,每个数字独占一行:3442116299...我正在编写一个脚本,以便打印文件中所有数字的总和。我已经有一个解决方案,但效率不高(运行需要几分钟的时间)。...的数值之和,并在处理完所有行后输出总和。'...awk 自动将字段内容视为数字进行累加。END:这是 awk 的一个特殊模式,表示在处理完所有的输入行之后执行相应的动作。{ print sum }:这是在 END 模式下执行的动作。...它打印出 sum 变量的值,也就是之前累加的所有数字的总和。因此,此命令的整体作用是从 numbers 文件中累加所有第一列的数值,并最后显示出这个总和。...它接收通过管道传来的由 paste 合成的带有 + 分隔的算术表达式字符串,并计算该表达式的结果。综上所述,整个命令的作用是将 numbers 文件中的所有数值相加求和。

    1.1K00
    领券