首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    1.问题描述 给你一个整数数组 nums,返回数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...可以先计算给定数组所有元素的乘积,然后对数组中的每个元素 x,将乘积除以 x 求得除自身值以外的数组乘积。 然后这样的解决方法有一个问题,就是如果输入数组中出现 0,那么这个方法就失效了。...时间复杂度: O(n^2),需要两层遍历,第一层为遍历数组中的每一个元素,第二层是遍历数组中除当前元素的其他所有元素。 空间复杂度: O(1)。...* nums[i-1] } R[n-1] = 1 for i := n - 2; i >= 0; i-- { R[i] = R[i+1] * nums[i+1] } // 遍历数组,获取答案...除自身以外数组的乘积 - LeetCode

    14410

    除自身以外数组的乘积

    题目: 给你一个长度为 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

    33120

    除自身以外数组的乘积

    题目 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。...对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积。 我们需要用两个循环来填充 L 和 R 数组的值。...预处理 L 和 R 数组以及最后的遍历计算都是 O(N) 的时间复杂度。 空间复杂度:O(N),其中 N 指的是数组 nums 的大小。...空间复杂度:O(1),题目中所述,返回数组的空间不算,故所使用的额外存储空间为 left 和 right。故只有常数级别的空间复杂度。

    34610

    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个数组来记录当前值左侧的乘积和当前值右侧的乘积,两个乘积结果再进行一次对应位置相乘即为排除当前位置数的所有元素乘积...从右侧动态计算后缀的原理和计算前缀原理类似,而此时我们的res为前缀积,在一次循环中,我们可以使用前缀积和动态计算的后缀积相乘得到最终结果。

    37710

    01—除自身以外数组的乘积【LeetCode238】

    题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...,可以通过计算该索引下的数的左边和右边的乘积之和相乘即可。...首先遍历题给数组nums,分别计算题中数组的每个索引的左边的所有数的乘积和右边所有数的乘积,放入两个数组L和R中,然后再新建一个数组result,对数组result进行一次遍历,数组result中每个索引处的值等于数组...,L的第一个值为1,R的最后一个值为1 L[0] = 1; R[nums.length-1] = 1; //填充L数组,即每个索引处左边的乘积的数组,第一个索引处的值已经设置

    13210

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

    给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。...题解: 我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。...对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积。 2.我们需要用两个循环来填充 L 和 R 数组的值。...- 2; i >= 0; i--) { R[i] = nums[i + 1] * R[i + 1]; } // 对于索引 i,除 nums[i...预处理 L 和 R 数组以及最后的遍历计算都是 O(N) 的时间复杂度。 空间复杂度:O(N),其中 N 指的是数组 nums 的大小。

    27120

    除自身以外数组的乘积

    一、题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...  32 位 整数范围内 三、解题思路 根据题目要求,我们需要计算出数组nums中,每个元素除自己之外的乘积值,即假设nums包含4个元素,分别为nums[0]~`nums[3]`,那么最终结果如下所示...进行计算操作: 【正向遍历数组】 这种遍历方式,我们可以来计算左下角的数字乘积; 【逆向遍历数组】 这种遍历方式,我们可以来计算右上角的数字乘积(用temp保存),然后与左下角再执行相乘操作; 好了,如上就是本题的解题思路了...: 写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

    29820

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

    前言 这是力扣的238题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的两种。...一、题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。...根据题目对 ans[i] 的定义,可列出下图所示的表格。 根据表格的主对角线(全为 1 ),可将表格分为 上三角 和 下三角 两部分。...计算 ans[i] 的 下三角 各元素的乘积,直接乘入 ans[i] 。 计算 ans[i] 的 上三角 各元素的乘积,记为 tmp ,并乘入 ans[i] 。 返回 ans 。...因此需要进行两次遍历,第一次遍历用于求左部分的乘积,第二次遍历在求右部分的乘积的同时,再将最后的计算结果一起求出来。

    13210

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

    计算左积    前面说过,我们需要求出各元素的左积与右积,第一个元素的左积为1,最后一个元素的右积也为1。因此我们求左积的过程可以分为三步:获取、存入、变化。...获取 左积,顾名思义是从最左边开始求,也就是第一个元素,我们先定义一个初始积 mul为1,把它作为第一个元素的左积。...计算右积 右积的计算和左积完全一致,最后一个元素的右积值也是1,因此我们要先将mul重赋值为1,也是分为获取、存入、变化三步走,不过这次是从右往左进行计算。...源码 下面是原码展示 //力扣 23.除自身以外数组的乘积 //左右互乘法 #include int* productExceptSelf(int* nums, int numsSize...除自身以外数组的乘积 - 力扣(LeetCode) 前面提到的malloc标准相关的网站为C Plus Plus,是一个国外网站,但访问速度不错,可惜全英文。

    28710
    领券